ggplot仅绘制顶部的X条(由于有光泽,在ggplot命令中)

问题描述 投票:0回答:1

我已经搜索了这个答案,但是找不到。我只想通过仅对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 ...
r ggplot2 bar-chart subset manipulate
1个回答
0
投票

看起来您已经生成了想要的绘图的代码,所以您只是在寻找一种方法来将观察值减少为“前X个,对吗?

对此的简单答案可能是:首先(1)对数据框进行排序(从数据外观中按“ Residenti”排序,然后(2)通过head(df, x)绘制该数据框的子集。

所以类似:

sorted.df <- your.df[order(Residenti, decreasing = TRUE),]
ggplot(data=subset(head(sorted.df, top.X)), aes(...)) + ...
© www.soinside.com 2019 - 2024. All rights reserved.