我已经搜索了这个答案,但是找不到。我只想通过仅对ggplot进行编码来显示ggplot barplot的前X个元素。让我进一步解释一下。我有一个数据集,列出了每年(1999-2018年)一个城市的居民人数,性别,公民身份以及该城市的季度/区域。我选择了一年零一个公民身份,然后绘制了每个季度的居民人数(y轴,按性别分性别的堆叠的条形图),按居民人数排序。
这是一个示例:Plotting residents for each quarter, "Afghanistan", year 2018
我只是想减少到前X个(例如10个)小节。我必须将代码插入Shinyapp,因此我试图将指令直接插入下面的“操作”函数中的代码中。在aes / reorder函数中有没有办法做到这一点(请参见下面的代码)?
这是代码,我尝试(不成功)使用“子集”功能切入否。的居民(按季度划分,但按性别分组,即我想保留四分之一,其中女性为8,男性为7)。
非常感谢!
p10 <- manipulate(
ggplot(subset(df_tothab_STR_citt[df_tothab_STR_citt$Y==YearList &
df_tothab_STR_citt$Citt==CittList,]),
aes(x = reorder(Nil, Residenti, FUN = sum),
y = Residenti,
group = Gen,
fill = Gen)) +
geom_bar(stat = "identity") +
scale_fill_brewer(palette = "Set1") +
ggtitle(paste(CittList, "-", YearList)) +
coord_flip() +
labs(fill="Gender", x="Nil", y="Resident") +
theme_bw(),
CittList = picker(
as.list(unique(as.character(df_tothab_STR_citt$Citt)))),
YearList = picker(
as.list(unique(as.character(sort(df_tothab_STR_citt$Y)))))
)
这也是数据集的“ head”和“ str”。
head(df_tothab_STR_citt)
Y Nil Gen Citt Residenti
1 2018 Baggio Femmine Afghanistan 2
2 1999 Bande Nere Femmine Afghanistan 1
3 2000 Bande Nere Femmine Afghanistan 1
4 2001 Bande Nere Femmine Afghanistan 1
5 2002 Bande Nere Femmine Afghanistan 1
6 2014 Buenos Aires - Venezia Femmine Afghanistan 1
str(df_tothab_STR_citt)
'data.frame': 196703 obs. of 5 variables:
$ Y : int 2018 1999 2000 2001 2002 2014 2016 2017 2018 2012 ...
$ Nil : chr "Baggio" "Bande Nere" "Bande Nere" "Bande Nere" ...
$ Gen : Factor w/ 2 levels "Femmine","Maschi": 1 1 1 1 1 1 1 1 1 1 ...
$ Citt : chr "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
$ Residenti: int 2 1 1 1 1 1 1 1 1 3 ...
看起来您已经生成了想要的绘图的代码,所以您只是在寻找一种方法来将观察值减少为“前X个,对吗?
对此的简单答案可能是:首先(1)对数据框进行排序(从数据外观中按“ Residenti”排序,然后(2)通过head(df, x)
绘制该数据框的子集。
所以类似:
sorted.df <- your.df[order(Residenti, decreasing = TRUE),]
ggplot(data=subset(head(sorted.df, top.X)), aes(...)) + ...