首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条形图的绘图顺序取决于值(ggplot2)

条形图的绘图顺序取决于值(ggplot2)
EN

Stack Overflow用户
提问于 2014-08-04 08:30:16
回答 1查看 981关注 0票数 2

考虑两个系列的值rr1rr2

代码语言:javascript
复制
rr1 <- c(-1, -0.6, 1.7, 6.3, 9, 10, 8.8, 6.2, 4.5, 4, 3.4)
rr2 <- c(-2.3, -1.8, -4, -5.7, -7.2, -5.6, -2.3, 0.2, -0.3, -1.4, -1.3)

图1:

rr1主要为正( x=-5和x=-4除外),而rr2为阴性(x=2除外)。

使用ggplot2在同一个条形图中对rr1rr2进行分组(图2):

代码语言:javascript
复制
dat <- data.frame(
  group = rep(c("rr1", "rr2"), each=11),
  x = rep(-5:5, 2),
  y = c(rr1, rr2)
)
ggplot(dat, aes(x=x, y=y, fill=group)) + 
  geom_bar(stat="identity", position="identity", width=0.25) +
  scale_x_continuous(breaks=-5:5) +
  scale_y_continuous(breaks=seq(-10,10,2.5), limits=c(-10,10)) +
  theme(axis.text.x=element_text(size=14), axis.text.y=element_text(size=14), legend.text=element_text(size=14))

图2:

当x等于-5和-4时,是否有一种在rr1上绘制rr2的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-04 14:42:11

问题是rr2值打印在rr1上,因此有手动解决方案--首先打印所有正的rr1,然后打印所有负的rr2、负的rr1和正的rr2。

代码语言:javascript
复制
rr1 <- c(-1, -0.6, 1.7, 6.3, 9, 10, 8.8, 6.2, 4.5, 4, 3.4)
rr2 <- c(-2.3, -1.8, -4, -5.7, -7.2, -5.6, -2.3, 0.2, -0.3, -1.4, -1.3)

dat <- data.frame(
  group = rep(c("rr1", "rr2"), each=11),
  x = rep(-5:5, 2),
  y = c(rr1, rr2)
)

positive_rr1 <- subset(dat,group=="rr1" & y >=0)
negative_rr1 <- subset(dat,group=="rr1" & y <0)
positive_rr2 <- subset(dat,group=="rr2" & y >=0)
negative_rr2 <- subset(dat,group=="rr2" & y <0)

ggplot(dat, aes(x=x, y=y, fill=group)) + 
  geom_bar(data=positive_rr1,stat="identity", position="identity", width=0.25) +
  geom_bar(data=negative_rr2,stat="identity", position="identity", width=0.25) +
  geom_bar(data=negative_rr1,stat="identity", position="identity", width=0.25) +
  geom_bar(data=positive_rr2,stat="identity", position="identity", width=0.25) +
  scale_x_continuous(breaks=-5:5) +
  scale_y_continuous(breaks=seq(-10,10,2.5), limits=c(-10,10)) +
  theme(axis.text.x=element_text(size=14), axis.text.y=element_text(size=14), legend.text=element_text(size=14))

上面的图表不是堆叠的图表,因为rr1是打印在rr2上的,为了得到叠加的图表,我们可以修改dat

代码语言:javascript
复制
for(i in -5:5){
  if(dat[dat$x==i & dat$group=="rr1","y"] < 0 & dat[dat$x==i & dat$group=="rr2","y"] < 0){
    dat[dat$x==i & dat$group=="rr2","y"] <- dat[dat$x==i & dat$group=="rr2","y"]+
      dat[dat$x==i & dat$group=="rr1","y"]
  }
  if(dat[dat$x==i & dat$group=="rr1","y"] > 0 & dat[dat$x==i & dat$group=="rr2","y"] > 0){
    dat[dat$x==i & dat$group=="rr1","y"] <- dat[dat$x==i & dat$group=="rr2","y"]+
      dat[dat$x==i & dat$group=="rr1","y"]
  }
}

positive_rr1 <- subset(dat,group=="rr1" & y >=0)
negative_rr1 <- subset(dat,group=="rr1" & y <0)
positive_rr2 <- subset(dat,group=="rr2" & y >=0)
negative_rr2 <- subset(dat,group=="rr2" & y <0)

ggplot(dat, aes(x=x, y=y, fill=group)) + 
  geom_bar(data=positive_rr1,stat="identity", position="identity", width=0.25) +
  geom_bar(data=negative_rr2,stat="identity", position="identity", width=0.25) +
  geom_bar(data=negative_rr1,stat="identity", position="identity", width=0.25) +
  geom_bar(data=positive_rr2,stat="identity", position="identity", width=0.25) +
  scale_x_continuous(breaks=-5:5) +
  scale_y_continuous(breaks=seq(-10,10,2.5), limits=c(-10,10)) +
  theme(axis.text.x=element_text(size=14), axis.text.y=element_text(size=14), legend.text=element_text(size=14))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25114546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档