R:如何制作一个考虑到样本量的小提琴情节,盒百分位图?

时间:2013-04-05 21:15:26

标签: r plot kernel-density density-plot

使用一个简单的例子,让我们说:

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

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

因此,我的问题是如何创建一个考虑到样本量的图表。 “C”的样本量远远大于“A”,有没有一种方法可以让'C'的小提琴曲线显示出比'A'更“小”的小提琴?因此,这将是我认为的三个类别的密度分布,因此即使“A”和“C”的整个分布形状可能相等,而不是显示相同的图像,它们显示'A'具有比形状更小的形状。 'C'和'B'也因为它的样本量较小。

2 个答案:

答案 0 :(得分:1)

尺寸不会有所不同,因为小提琴图是箱线图和密度/概率图的组合。

这是一个简短的例子:

library(ggplot2)

a)大小相同

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

答案 1 :(得分: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