使用聚合值的小提琴图(geom_violin)

5

我想创建带有聚合数据的小提琴图。我的数据包含类别、数值列和计数列:

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))

如果我创建一个简单的小提琴图,它看起来像这样:

plot <- ggplot(data, aes(x = category, y = value)) + geom_violin()
plot


(来源:ahschulz.de)

这不是我想要的。一种解决方案是通过乘以每个类别值组合的行来重塑数据框。问题是我的计数高达数百万,需要几小时才能绘制! :-(

我的数据有没有解决方案呢?

提前致谢!

2个回答

7

在计算面积时,您可以提交重量。

plot2 <- ggplot(data, aes(x = category, y = value, weight = count)) + geom_violin()
plot2

您会收到权重不等于1的警告信息,但这没关系。请参见此处类似/相关讨论

enter image description here


这种方法似乎给出了不准确的密度。当我使用这种方法绘图并将其与使用整个数据集绘图进行比较时,图形看起来非常不同。 - Harry M

2

使用 stat="identity" 并指定 violinwidth 美学似乎有效,尽管我不得不加入一个调整因子:

ggplot(data, aes(x = category, y = value)) + 
   geom_violin(stat="identity",aes(violinwidth=0.2*count))

整洁的解决方案,这似乎根本没有计算KDE,而只是连接计数(使用调整因子来给出一些厚度?)在某些情况下可能是可取的。 - Andy W
是的,我认为你的解决方案正是原帖作者想要的。 - Ben Bolker
1
是否有较新版本的ggplot类似的解决方案?如果我在2.1.0版本中使用这段代码,会出现“错误:未知参数:trim、scale”的问题。 - M4RT1NK4
不知道。也许可以提一个新问题?我在一两分钟内没有找到解决方案。 - Ben Bolker
我在这里提出了一个关于count的问题:https://stackoverflow.com/questions/51847367/ggplot2-violin-plot-with-stat-identity - Randoms

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接