繁体   English   中英

小提琴 plot 数据帧

[英]Violin plot of a data frame

我有一个data.frame ,例如:

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

并且我想把它的每一根柱子 plot 放在一个联合小提琴 plot 中。

这是我目前所处的位置:

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

我接下来要做的是 plot df的 colnames 作为 x 轴标签,而不是vioplot的默认 x 轴标签,此外它们不会相互重叠。 我想这可以通过在 plot 中扩展df的列或倾斜 x 轴标签来实现。 但我无法弄清楚。

可能更容易使用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()

在此输入图像描述

我最喜欢ggplot解决方案,但是这是你用do.call做的方法:

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

在此输入图像描述

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

您是否尝试删除do.call调用并单独执行它们。

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

在此输入图像描述

另一个简单的选择是使用来自 ggpubr 的ggviolin function具有长格式数据,如下所示:

df = data.frame(AAA=rnorm(100,1,1),BBB=rnorm(100,2,1.5),CCC=rnorm(100,1.5,1.2))
library(dplyr)
library(tidyr)
library(ggpubr)
df %>%
  pivot_longer(cols = everything()) %>%
  ggviolin(x = "name",
           y = "value")

代表 package (v2.0.1) 于 2022 年 8 月 14 日创建

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM