当前位置:  开发笔记 > 编程语言 > 正文

ggplot2:更改条形图上的堆栈顺序

如何解决《ggplot2:更改条形图上的堆栈顺序》经验,为你挑选了1个好方法。

我正在尝试使用facet_wrap创建一个堆积条形图,但我想要翻转我的堆叠变量("已开发")的顺序.我已经重新排序了这些因素,并尝试了"order = descend()"以及"scale_fill_manual",似乎没有任何效果.

这是我的代码:

developed=rep(c("developed","available"),6)
agriculture=rep(c(rep("loi",2), rep("dryland",2), rep("agroforestry",2)),2)  
acres=c(7435,24254,10609,120500,10651,75606,6037,9910,4390,895,9747,46893)
islands=c(rep("All islands",6), rep("Oahu",6))
all_is2=data.frame(developed, agriculture, acres, islands)
head(all_is2)
  developed  agriculture  acres      island
1 developed          loi   7435 All islands
2 available          loi  24254 All islands
3 developed      dryland  10609 All islands
4 available      dryland 120500 All islands
5 developed agroforestry  10651 All islands
6 available agroforestry  75606 All islands

改变"农业"和"发达"的因素水平

all_is2$agriculture=factor(all_is2$agriculture,levels=c("loi","dryland","agroforestry"))
all_is2$developed=factor(all_is2$developed,levels=c("developed","available"))
levels(all_is2$developed)
[1] "developed" "available"

然后,绘图:

ggplot(all_is2,aes(x=agriculture,y=acres,fill=developed))+
     geom_bar(position="stack", stat="identity")+
     facet_wrap(~islands)+ scale_fill_grey(start=0.8, end=0.2, name="")+ xlab("")+ylab("Acres")+theme_bw()+ scale_y_continuous(labels=comma)

图表

我希望条形图的"开发"部分是灰色的,在条形图的"可用"部分的顶部是黑色的.并且图例也应该与条形的顺序相匹配.

此外,是否可以将facet_wrap"All islands"和"Oahu"移动到图表底部的"loi""dryland"和"agroforestry"下.谢谢您的帮助!!



1> Heroka..:

这可能是一个解决方案.

我所做的是对数据集进行排序,以便我希望最接近x轴的值出现在数据集中.(我在这里使用了你的因素排序).这固定了杆的位置.

然后,我们必须改变图例的颜色和顺序.我无法围绕scale_fill_grey,所以我将其更改为scale_fill_manual,同时设置值和中断.

ggplot(all_is2[rev(order(all_is2$developed)),] ,aes(x=agriculture,y=acres,fill=developed))+
  geom_bar(position="stack", stat="identity")+theme_bw()+
  facet_wrap(~islands)+ 
  scale_fill_manual(values=c(developed="grey80",available="grey20"),name="",
                    breaks=c("developed","available"))+
 xlab("")+ylab("Acres")

在此输入图像描述

我不知道这是一个错误还是一个功能,我认为这也发生在ggplot中的先前版本中,但是看起来有了stat_identity,第一个观察点被绘制成最接近x轴,第二个观察点被绘制在最接近x轴的位置,等等.

示范:

set.seed(123)
testdat <- data.frame(x=1,y=sample(5))


p1 <- ggplot(testdat, aes(x=x,y=y,fill=factor(y))) +geom_bar(stat="identity")+labs(title="order in dataset")
p2 <- ggplot(testdat[order(testdat$y),],aes(x=x,y=y,fill=factor(y))) +
  geom_bar(stat="identity") + labs(title="ordered by y")
p3 <- ggplot(testdat[rev(order(testdat$y)),],aes(x=x,y=y,fill=factor(y))) +
  geom_bar(stat="identity") + labs(title="reverse ordered by y")

在此输入图像描述


哦,你打败了我!检查`facet_wrap(〜islands,switch ="x")`以移动下面的facet标签.这是`ggplot2_2.0.0`的新功能
推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有