0

我有两个不同长度的向量,并想为它们创建一个小提琴图。我目前正在对cbind它们做的是,这使得较短的向量被重复,直到它与较长的向量的长度相匹配(默认情况下由cbindR 完成)。

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

这会影响小提琴的形状吗?有没有更正确的方法来创建小提琴情节而不必人为地增加其中一个情节的长度?

4

1 回答 1

3

而不是cbinding 两个不同长度的向量,这会导致回收,然后融化,而是制作两个数据框,在其中标记每个代表的内容和rbind它们。这样,您就可以从ggplot预期形状的数据开始,并且不会冒从两组数据中较短的一组数据中重复值的风险。

library(ggplot2)

set.seed(710)
C1 <- data.frame(value = rnorm(100), variable = "C1")
C2 <- data.frame(value = rnorm(500), variable = "C2")

dat <- rbind(C1, C2)
head(dat)
#>         value variable
#> 1 -0.97642446       C1
#> 2 -0.51938107       C1
#> 3  1.05793223       C1
#> 4 -0.88139935       C1
#> 5 -0.05997154       C1
#> 6  0.31960235       C1

ggplot(dat, aes(x = variable, y = value)) +
  geom_violin(scale = "width", adjust = 1, width = 0.5)

reprex 包(v0.2.0)于 2018 年 7 月 11 日创建。

于 2018-07-11T16:43:15.797 回答