2013-04-05 99 views
1

要使用一个简单的例子,让我们说:R:如何制作考虑样本大小的小提琴情节,盒子百分位数情节?

A = rnorm(10) 
B = rnorm(100) 
C = rnorm(500) 

library(vioplot) 
vioplot(A,B,C) 

我的问题是这样如何创建这样一个图表,考虑到样本大小。 'C'的样本量比'A'高得多,那么'C'的小提琴曲线可以显示比'A'更大的小提琴吗?因此,这将是密度分布,贯穿我想的三个类别,因此即使'A'和'C'的整个分布形状可能相等,而不是显示相同的图像,它们显示'A'具有比形状小的形状'C'和'B'也是由于其较小的样本量。

+0

您好!请通过看看[**如何使一个伟大的可重复的例子**],使您的文章重现性(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-例如)为我们提供帮助。谢谢。 – Arun 2013-04-05 21:17:45

+2

有一个很好的答案,并在[交叉验证]中讨论过[1] [1]:http://stats.stackexchange.com/questions/13555/how-to-scale-violin-地块比较 – Stedy 2013-04-05 21:35:35

+1

谢谢Arun,我根据你提到的内容编辑了我的问题。 – user2250706 2013-04-05 21:42:39

回答

1

很遗憾,vioplot不接受某些参数的矢量。这是一个解决方法。此替代方法的vioplot()中的帮助功能是atwex参数以及add=T。基本上用每个小提琴独特的参数来塑造他们你想要的方式。您可能需要根据您使用wex缩放样本大小的方式进行调整。

n<-c(100,1000) 
size<-scale(sqrt(n),center=F) 

x1<-rnorm(n[1]) 
x2<-rnorm(n[2]) 

#initialize an empty plot 
plot(0:3,rep(0,4),type='l',xlim=c(0,3),ylim=c(-4,4),ylab="",xlab="",xaxt="n",lty=3) 

# fill in the violins at specific x locations using the `wex` parameter for size 
vioplot(x1,at=1,wex=size[1],add=T,col="darkgray") 
vioplot(x2,at=2,wex=size[2],add=T,col="darkgray") 
axis(1,at=1:2,labels=c("Mon","Tues")) 

enter image description here

+0

谢谢ndoogan,绝对是我应该能够加入到我的数据。 – user2250706 2013-04-05 22:10:26

1

尺寸不会不同,因为小提琴情节是盒式情节和密度/概率情节的组合。

下面是简单的例子:

library(ggplot2) 

一)相同尺寸

df.ex<-data.frame(G=c(rep('A',100),rep('B',100)),Y=c(rnorm(100),rnorm(100))) 
ggplot(data=df.ex,aes(x=G,y=Y)) + geom_violin() 

B)不同大小

df.ex<-data.frame(G=c(rep('A',100),rep('B',1000)),Y=c(rnorm(100),rnorm(1000))) 
ggplot(data=df.ex,aes(x=G,y=Y)) + geom_violin() 

你可以用geom_jitter结合它会告诉你有多少分有:

ggplot(data=df.ex,aes(x=G,y=Y)) + geom_jitter() + geom_violin() 
+0

感谢Miciej,关于实现geom_jitter的信息非常有帮助。上面的其中一个评论中包含的链接看起来很有趣。 – user2250706 2013-04-05 21:56:01