R将所有列并排绘制为小提琴

时间:2020-07-28 14:50:49

标签: r ggplot2 plot

我有一个数据帧,具有12列和270行,我从一个.csv文件中读取,我想对其进行“比较”-将它们绘制在一个图中。

DataFrame

我想并排获得14张小提琴排行榜(或在不同情节中的前6张和其他6张),但是我不确定如何。

我知道它应该像这样:

df = pd.DataFrame(data=[['2018-12-24',1,True], ['2018-12-25',2,False], ['2019-12-24',3,True], ['2019-12-25',4,False], ['2020-12-24',5,False], ['2020-12-25',6,False]], columns=['d','n','b']) df['d'] = pd.to_datetime(df['d']) 但是我只会得到“找不到对象变量”

编辑:

很明显,我引用的代码是错误的(我写了它,但是不记得df实际上是由什么组成的,以及它是由什么组成的)-那么如何实现呢?

enter image description here

2 个答案:

答案 0 :(得分:1)

我希望我了解你想要的。尝试此操作,但请注意所有变量均为数字。

library(tidyverse)
    
df %>%
  gather(key = "variable", value = "value") %>%
    ggplot(aes(x = variable, y = value)) + 
    geom_violin(aes(fill = variable)) + 
    theme(legend.position = "bottom") + 
    guides(fill = guide_legend(reverse = TRUE)) +
    coord_flip() +
    xlab("") + ylab("")

答案 1 :(得分:1)

您需要首先pivot_longer数据框。由于您没有任何可复制的数据,因此让我们首先进行以​​下操作:

set.seed(69)
df        <- data.frame(replicate(14, rnorm(270, runif(1, 5, 10))))
names(df) <- paste0("h", 1:14) 

现在我们可以做到:

library(ggplot2)
library(tidyr)

plot_df      <- pivot_longer(df, cols = 1:14)
plot_df$name <- factor(plot_df$name, paste0("h", 1:14))

ggplot(plot_df, aes(name, value, fill = name)) + geom_violin()

reprex package(v0.3.0)于2020-07-28创建