【发布时间】:2018-12-19 17:58:21
【问题描述】:
我有两个不同长度的向量,并想为它们创建一个小提琴图。我目前正在做的是 cbind 他们,这使得较短的向量被重复,直到它与较长的向量的长度相匹配(默认情况下由 R 中的 cbind 完成)。
library(ggplot2)
C1 <- rnorm(100)
C2 <- rnorm(500)
dat <- cbind(C1,C2)
# Violin plots for columns
mat <- reshape2::melt(data.frame(dat), id.vars = NULL)
pp <- ggplot(mat, aes(x = variable, y = value)) + geom_violin(scale="width",adjust = 1,width = 0.5,fill = "gray80")
pp
这会影响小提琴的形状吗?有没有更正确的方法来创建小提琴情节而不必人为地增加其中一个情节的长度?
【问题讨论】:
-
ggplot需要长形数据,因此您不应该将cbind视为两个单独的列。在一个中重复值意味着值出现的频率比它们应该出现的频率高,这会改变形状。相反,制作 2 个数据框,带有某种 ID 列以显示它是 C1 还是 C2,并将rbind它们变成长数据。跳过melt,看看你绘制时会发生什么 -
您正在
cbind转换为宽格式,然后使用melt转换为长格式。使用dat = data.frame(value = c(C1, C2), variable = c(rep("C1", length(C1)), rep("C2", length(C2))))直接转为长格式。 -
@camille 和 Gregor 听起来像是合理的建议。我可以接受它们作为答案。
标签: r ggplot2 violin-plot