1

我对使用 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");
4

1 回答 1

7

首先,您需要以不同的方式设置数据:作为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 默认情况下按字母顺序排列因子;如果您想要不同的顺序,您必须手动更改它。

于 2013-01-19T15:29:11.180 回答