1

举一个简单的例子,假设:

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

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

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

4

2 回答 2

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()
于 2013-04-05T21:30:20.457 回答
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"))

在此处输入图像描述

于 2013-04-05T21:54:48.503 回答