数据框的小提琴情节

时间:2014-02-22 21:10:08

标签: r plot

我有一个data.frame,例如:

df = data.frame(AAA=rnorm(100,1,1),BBB=rnorm(100,2,1.5),CCC=rnorm(100,1.5,1.2))

我想在联合小提琴情节中绘制每一列。

到目前为止我在这里:

names(df)[1] = 'x'
do.call('vioplot', c(df,col="red",drawRect=FALSE))

我接下来要做的是将df的名称作为x轴标签绘制而不是vioplot的默认x轴标签,另外还有一些方法相互挤压。我想这可以通过在图中展开df的列或通过倾斜x轴标签来实现。但我无法弄明白。

3 个答案:

答案 0 :(得分:8)

可能更容易使用ggplot

df = data.frame(AAA=rnorm(100,1,1),
                BBB=rnorm(100,2,1.5),
                CCC=rnorm(100,1.5,1.2))

需要将数据转换为ggplot可以处理的内容:

df.m <- reshape2::melt(df, id.vars = NULL)

和情节:

library(ggplot2)
ggplot(df.m, aes(x = variable, y = value)) + geom_violin()

enter image description here

答案 1 :(得分:5)

我最喜欢ggplot解决方案,但您可以使用do.call来实现此目标:

do.call(vioplot,c(unname(df),col='red',drawRect=FALSE,names=list(names(df))))

enter image description here

值得注意的是,您不必执行names(df)[1] = 'x',因为您使用unname删除了姓名。

答案 2 :(得分:2)

您是否尝试放弃do.call来电并单独进行。

vioplot(df[,"AAA"], df[,"BBB"], df[,"CCC"], 
        col = "red", drawRect = FALSE,names = names(df))

enter image description here