根据值ggplot2重复排序条形图中的变量[复制]

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

这个问题在这里已有答案:

更新了示例数据:

mydata <- read.table(header=TRUE, text="
Item    Value   Site
                     A  96  site1
                     B  1   site1
                     C  2   site1
                     A  1   site2
                     B  62  site2
                     A  19  site3
                     B  1   site3
                     C  11  site3
                     D  9   site3
                     ")

我要做的是绘制一个堆积的条形图,并为每个站点重新排序项目变量,并按值列对其进行排序。因此,对于每个站点,具有最大百分比值的项目位于堆积条的底部,接着是下一个最大百分比值,依此类推。但是,我尝试了不同的方法,并且难以使用值列通过堆积条排列。

使用解决方案进行编辑:按照上面标记为答案的链接,使用geom_bar单独绘制每个条形图并添加重新排序功能 - aes(fill = reorder(Item,+ Value))

r ggplot2 geom-bar
3个回答
1
投票

我通常依靠forcats包,特别是fct_reorder

ggplot(data = mydata, 
       aes(x = site, 
           y = percentage, 
           fill = fct_reorder(substrate, percentage))) + 
  geom_bar(stat = "identity") +
  guides(fill = guide_legend(title = "substrate"))

这给出了以下内容:

reordered plot


1
投票

这对你有用

ggplot(data=my_data, aes(x=site, y=percentage, fill=reorder(substrate, percentage))) +
  geom_bar(stat="identity", position="stack")

在fill参数中使用reorder命令。


0
投票

我认为forcats是一个很好的方式,但在我们拥有它之前 - 或者当你只想使用没有库的基础R时,this更像是传统方法:

mydata$substrate <- factor(mydata$substrate, levels = unique(mydata$substrate[order(mydata$percentage)]))

ggplot(data=mydata, aes(x=site, y=percentage), fill= Substrate) + 
  geom_bar(stat="identity",aes(fill=substrate))

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.