【问题标题】:Boxplots using ggplot2使用 ggplot2 的箱线图
【发布时间】:2013-01-19 15:28:03
【问题描述】:

我对使用 ggplot2 完全陌生,但听说它具有出色的绘图功能。我有一个包含不同样本的列表,并根据三种仪器对每个样本进行观察。我想把它变成一个带有箱线图的数字。我不能包含图形,但下面包含了制作示例图形的代码。我们的想法是为每种仪器提供一个带有每个样本的箱线图的图形。

此外,在图旁边,我想制作一种图例,为每个样本编号命名。我不知道如何开始使用 ggplot2。

任何帮助将不胜感激

生成示例图像的 R 代码是:

#Make data example
Data<-list();
Data$Sample1<-matrix(rnorm(30),10,3);
    Data$Sample2<-matrix(rnorm(30),10,3);
Data$Sample3<-matrix(rnorm(30),10,3);
    Data$Sample4<-matrix(rnorm(30),10,3);

#Make the plots
par(mfrow=c(3,1)) ;
boxplot(data.frame(Data)[seq(1,12,by=3)],names=c(1:4),xlab="Sample number",ylab="Instrument 1");
boxplot(data.frame(Data)[seq(2,12,by=3)],names=c(1:4),xlab="Sample number",ylab="Instrument 2");
boxplot(data.frame(Data)[seq(3,12,by=3)],names=c(1:4),xlab="Sample number",ylab="Instrument 3");

【问题讨论】:

    标签: r boxplot ggplot2


    【解决方案1】:

    首先,您需要以不同的方式设置数据:作为data.frame 而不是矩阵列表。您需要一列用于sample,一列用于instrument,一列用于观察到的value。这是一个假数据集:

    df <- data.frame(sample = rep(c("One","Two","Three","Four"),each=30), 
                     instrument = rep(rep(c("My Instrument","Your Instrument","Joe's Instrument"),each=10),4),
                     value = rnorm(120))
    
    > head(df)
      sample    instrument       value
    1    One My Instrument  0.08192981
    2    One My Instrument -1.11667766
    3    One My Instrument  0.34117450
    4    One My Instrument -0.42321236
    5    One My Instrument  0.56033804
    6    One My Instrument  0.32326817
    

    要获得三个图,我们将使用 faceting。要获得箱线图,我们使用geom_boxplot。代码如下所示:

    ggplot(df, aes(x=sample,y=value)) + 
      geom_boxplot() + 
      facet_wrap(~ instrument, ncol=1)
    

    如果您将名称直接放在样本变量中,它会将它们打印在图下方,而不是包含样本编号的图例。这样,人们就不必在名称中引用数字:立即清楚每个图的样本是什么。请注意,ggplot 默认情况下按字母顺序排列因子;如果您想要不同的顺序,您必须手动更改它。

    【讨论】:

    • 认真的吗? OP 基本上说,“我什至没有尝试在 ggplot2 中这样做,告诉我怎么做!”你有义务吗?真的吗?
    • 因为本网站的明确要求之一是 OP 至少真诚地尝试解决他们自己的问题。 SO 不是获取“从零开始”教程的地方。
    • 感谢您的快速响应。这会让我走得很远。 @Joran 我确实在 ggplot2 中尝试过,尽管完全没有成功。 “ggplot2 的全新”的意思是:“我已经尝试了三个小时,这是我第一次使用 ggplot2”
    • 看,你可以随心所欲。 (而且你无法知道是我被否决了,事实上并非如此!)但是回答这些问题会告诉人们他们不需要费心去付出任何努力。
    • @MrOperator 没关系。下次,在您的问题中包含您(失败的)尝试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 2017-10-13
    • 1970-01-01
    相关资源
    最近更新 更多