我有一个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轴标签来实现.但我无法弄明白.
可能更容易使用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)

我最喜欢这个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.
您是否尝试过挂断do.call电话并单独进行操作。
vioplot(df[,"AAA"], df[,"BBB"], df[,"CCC"],
col = "red", drawRect = FALSE,names = names(df))
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
3957 次 |
| 最近记录: |