考虑两个系列的值rr1和rr2
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在同一个条形图中对rr1和rr2进行分组(图2):
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的方法?
发布于 2014-08-04 14:42:11
问题是rr2值打印在rr1上,因此有手动解决方案--首先打印所有正的rr1,然后打印所有负的rr2、负的rr1和正的rr2。
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。
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))

https://stackoverflow.com/questions/25114546
复制相似问题