如何在ggplot2中创建聚合数据的小提琴图?

时间:2017-06-28 19:45:06

标签: r plot ggplot2

我试图在ggplot2中创建一个聚合数据的小提琴图,其中包含预先计算的计数(原始数据太大,需要很长时间才能绘制)。下面的示例数据集。

data <- data.frame(category = rep(LETTERS[1:3],3),
               value = c(1,1,1,2,2,2,3,3,3),
               count = c(3,2,1,1,2,3,2,1,3))

此处找到的解决方案Violin Plot (geom_violin) with aggregated values似乎无法正常工作,但密度不准确。当我使用该方法进行绘图并与整个数据集的绘图进行比较时,绘图看起来非常不同。

任何人都知道如何绘制汇总数据?

1 个答案:

答案 0 :(得分:2)

您所看到的任何差异可能仅仅是由于密度计算方式的差异造成的。以下是您给出的示例:

data <- data.table(category = rep(LETTERS[1:3],3),
                   value = c(1,1,1,2,2,2,3,3,3),
                   count = c(3,2,1,1,2,3,2,1,3))
data[, count2 := count/sum(count), by = category]
ggplot(data, aes(x = category, y = value, weight = count2)) + geom_violin()

enter image description here

现在这里是重复值的相同数据,而不是计数:

val2 <- unlist(sapply(1:length(data$value), 
                      function(x) rep(data$value[x], 
                                      data$count[x])))
cat2 <- unlist(sapply(1:length(data$value), 
                      function(x) rep(data$category[x], 
                                      data$count[x])))

dat2 <- data.table(cat2, val2)
ggplot(dat2, aes(x = cat2, y = val2)) + geom_violin()

这会生成情节:enter image description here

差别很大,可能是由密度的计算方式引起的。