[英]How to place multiple boxplots in the same column with ggplot(geom_boxplot)
I would like to built a boxplot in which the 4 factors (N1:N4) are overlaid in the same column. 我想建立一个箱线图,其中四个因子(N1:N4)覆盖在同一列中。 For example with the following data:
例如,使用以下数据:
df<-data.frame(N=N,Value=Value)
Q<-c("C1","C1","C2","C3","C3","C1","C1","C2","C2","C3","C3","Q1","Q1","Q1","Q1","Q3","Q3","Q4","Q4","Q1","Q1","Q1","Q1","Q3","Q3","Q4","Q4")
N<-c("N2","N3","N3","N2","N3","N2","N3","N2","N3","N2","N3","N0","N1","N2","N3","N1","N3","N0","N1","N0","N1","N2","N3","N1","N3","N0","N1")
Value<-c(4.7,8.61,8.34,5.89,8.36,1.76,2.4,5.01,2.12,1.88,3.01,2.4,7.28,4.34,5.39,11.61,10.14,3.02,9.45,8.8,7.4,6.93,8.44,7.37,7.81,6.74,8.5)
with the following (usual) code, the output is 4 box-plots displayed in 4 columns for the 4 variables 使用以下(常规)代码,输出为4个变量的4列显示在4列中
ggplot(df, aes(x=N, y=Value,color=N)) + theme_bw(base_size = 20)+ geom_boxplot()
many thanks 非常感谢
Based on your comment, here's a way to add marginal boxplots. 根据您的评论,这是一种添加边际箱线图的方法。 We'll use the built-in
mtcars
data frame. 我们将使用内置的
mtcars
数据框架。
First, some set-up: 首先,进行一些设置:
library(cowplot)
# Common theme elements
thm = list(theme_bw(),
guides(colour=FALSE, fill=FALSE),
theme(plot.margin=unit(rep(0,4),"lines")))
Now, create the three plots: 现在,创建三个图:
# Main plot
p1 = ggplot(mtcars, aes(wt, mpg, colour=factor(cyl), fill=factor(cyl))) +
geom_smooth(method="lm") + labs(colour="Cyl", fill="Cyl") +
scale_y_continuous(limits=c(10,35)) +
thm[-2] +
theme(legend.position = c(0.85,0.8))
# Top margin plot
p2 = ggplot(mtcars, aes(factor(cyl), wt, colour=factor(cyl))) +
geom_boxplot() + thm + coord_flip() + labs(x="Cyl", y="")
# Right margin plot
p3 = ggplot(mtcars, aes(factor(cyl), mpg, colour=factor(cyl))) +
geom_boxplot() + thm + labs(x="Cyl", y="") +
scale_y_continuous(limits=c(10,35))
Lay out the plots and add the legend: 布置图并添加图例:
plot_grid(plotlist=list(p2, ggplot(), p1, p3), ncol=2,
rel_widths=c(5,1), rel_heights=c(1,5), align="hv")
You can overlay all four boxplots in a single column, but the plot will be unreadable. 您可以将所有四个箱形图叠加在一个列中,但是该图将不可读。 The first example below removes
N
as the x coordinate, but keeps N
as the colour aesthetic. 下面的第一个示例删除
N
作为x坐标,但保留N
作为颜色美感。 This results in the four levels of N
being plotted at a single tick mark (which I've removed by setting breaks
to NULL
). 这导致四个水平的
N
被绘制在单个刻度上(通过将breaks
设置为NULL
,我将其删除了)。 However, the plots are still dodged. 但是,这些地块仍被躲避。 To plot them one on top of the other, set the dodge width to zero, as I've done in the second example.
要将它们绘制在另一个之上,请将闪避宽度设置为零,就像在第二个示例中所做的那样。 However, the plots are not readable when they are overlaid.
但是,这些图在覆盖时不可读。
ggplot(df, aes(x="", y=Value,color=N)) +
theme_bw(base_size = 20) +
geom_boxplot() +
scale_x_discrete(breaks=NULL) +
labs(x="")
ggplot(df, aes(x="", y=Value,color=N)) +
theme_bw(base_size = 20) +
geom_boxplot(position=position_dodge(0)) +
scale_x_discrete(breaks=NULL) +
labs(x="")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.