我正在按两个类别绘制数据,首先是基础数据:
library(plyr)
library(ggplot2)
d1 <- data.frame(v1 = rnorm(30),
x = rep(letters[1:6],
c(6, 3, 8, 3, 4, 6)),
group = rep(paste("g", 1:3, sep = ""),
c(9, 11, 10)))
然后我订购因素
of <- ddply(d1, .(x), function(i) mean(i$v1))
of <- of[order(-of$V1),]
d1$x <- factor(d1$x, levels = of$x)
这提供了以下情节
ggplot(d1) + geom_point(aes( x = v1, y = x)) +
facet_grid(group ~ .,
scales = "free_y",
space = "free_y")
但是我还想为每个组添加一个单独的水平箱图,描绘相关的分布。我知道第一步是在y轴上提供一个“总计”空间:
d2 <- rbind(d1,
data.frame(v1 = NA,
x = "Total",
group = unique(d1$group)))
ggplot(d2) + geom_point(aes( x = v1, y = x)) +
facet_grid(group ~ .,
scales = "free_y",
space = "free_y")
其中提供了以下内容,而且我在这里
我只想在“Total”轴中断旁边有一个水平箱图,总结每个组的数据。
提前致谢。
答案 0 :(得分:2)
起点是制作两个数据框 - d1
作为原始数据框,d2
,其中x值全部为Total
。
d2 <- d1
d2$x <- "Total"
然后使用d1
制作积分,d2
制作箱图。以下是框图的垂直对齐示例,其中x
值用作x。问题是要使用水平箱图,您必须使用coord_flip()
。翻转轴和自由刻度不能一起使用。
ggplot()+geom_point(data=d1,aes(x=x,y=v1))+
geom_boxplot(data=d2,aes(x=x,y=v1))+
facet_wrap(~group ,
scales = "free_x")
要获得所需方向的解决方法是制作三个单独的图(每个组一个),然后将它们与grid.arrange()
一起放入库gridExtra
。对于第一个和第二个图,我删除了x轴的所有刻度,文本和标题。
library(gridExtra)
p1<-ggplot()+geom_point(data=subset(d1,group=="g1"),aes(x=x,y=v1))+
geom_boxplot(data=subset(d2,group=="g1"),aes(x=x,y=v1))+
coord_flip()+
facet_grid(group~.)+
scale_y_continuous(limits=c(-2,2.5))+
theme(axis.title.x=element_blank(),
axis.text.x=element_blank(),
axis.ticks.x=element_blank())
p2<-ggplot()+geom_point(data=subset(d1,group=="g2"),aes(x=x,y=v1))+
geom_boxplot(data=subset(d2,group=="g2"),aes(x=x,y=v1))+
coord_flip()+
facet_grid(group~.)+
scale_y_continuous(limits=c(-2,2.5))+
theme(axis.title.x=element_blank(),
axis.text.x=element_blank(),
axis.ticks.x=element_blank())
p3<-ggplot()+geom_point(data=subset(d1,group=="g3"),aes(x=x,y=v1))+
geom_boxplot(data=subset(d2,group=="g3"),aes(x=x,y=v1))+
coord_flip()+
facet_grid(group~.)+
scale_y_continuous(limits=c(-2,2.5))
grid.arrange(p1,p2,p3)