简体   繁体   English

如何使用ggplot(geom_boxplot)在同一列中放置多个箱形图

[英]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 非常感谢

Updated Answer 更新的答案

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")

在此处输入图片说明

Original Answer 原始答案

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM