我对使用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");
答案 0 :(得分: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默认按字母顺序排列因子;如果您想要不同的订购,则必须手动更改。