我有一个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轴标签来实现。但我无法弄明白。
答案 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()
答案 1 :(得分:5)
我最喜欢ggplot
解决方案,但您可以使用do.call
来实现此目标:
do.call(vioplot,c(unname(df),col='red',drawRect=FALSE,names=list(names(df))))
值得注意的是,您不必执行names(df)[1] = 'x'
,因为您使用unname
删除了姓名。
答案 2 :(得分:2)
您是否尝试放弃do.call
来电并单独进行。
vioplot(df[,"AAA"], df[,"BBB"], df[,"CCC"],
col = "red", drawRect = FALSE,names = names(df))