使用一个简单的例子,让我们说:
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 :(得分: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()
针对此变通办法的有用功能包括at
和wex
参数以及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"))