数据框的小提琴情节

use*_*545 6 plot r

我有一个data.frame,例如:

df = data.frame(AAA=rnorm(100,1,1),BBB=rnorm(100,2,1.5),CCC=rnorm(100,1.5,1.2))
Run Code Online (Sandbox Code Playgroud)

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

这是我到目前为止的地方:

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

我接下来要做的是绘制df作为x轴标签的colnames,而不是默认的x轴标签,vioplot以及它们不会相互运行的方式.我想这可以通过df在图中扩展列或通过倾斜x轴标签来实现.但我无法弄明白.

raw*_*awr 9

可能更容易使用ggplot

df = data.frame(AAA=rnorm(100,1,1),
                BBB=rnorm(100,2,1.5),
                CCC=rnorm(100,1.5,1.2))
Run Code Online (Sandbox Code Playgroud)

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

df.m <- reshape2::melt(df, id.vars = NULL)
Run Code Online (Sandbox Code Playgroud)

和情节:

library(ggplot2)
ggplot(df.m, aes(x = variable, y = value)) + geom_violin()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


nog*_*pes 5

我最喜欢这个ggplot解决方案,但以下是你将如何做到这一点do.call:

do.call(vioplot,c(unname(df),col='red',drawRect=FALSE,names=list(names(df))))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

值得注意的是,您不必这样做,names(df)[1] = 'x'因为您删除了名称unname.


Ric*_*ven 2

您是否尝试过挂断do.call电话并单独进行操作。

vioplot(df[,"AAA"], df[,"BBB"], df[,"CCC"], 
        col = "red", drawRect = FALSE,names = names(df))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述