ggplot2:Stat =“ Identity”的小提琴图

时间:2018-08-14 18:04:44

标签: r ggplot2 plot violin-plot

我正在尝试使用ggplot创建一个小提琴图,在该图中,小提琴的宽度不是由密度函数控制的,而是直接表示相关元素的数量。

我认为可以通过设置geom_violin(stat="identity")来实现,但是R会抱怨

> ggplot(allData, aes(x = tool, y = length)) + geom_violin(stat="identity")
Warning: Ignoring unknown parameters: trim, scale
Error in eval(substitute(list(...)), `_data`, parent.frame()) : 
  object 'violinwidth' not found

按照this answer的建议尝试添加aes(violinwidth=0.2*count)会得到

> ggplot(allData, aes(x = tool, y = length)) + geom_violin(stat="identity", aes(violinwidth=0.2*count))
Warning: Ignoring unknown parameters: trim, scale
Warning: Ignoring unknown aesthetics: violinwidth
Error in FUN(X[[i]], ...) : object 'count' not found

虽然我可以将violinwidth设置为一个常数,但这会使小提琴变成矩形。我该如何解决?

1 个答案:

答案 0 :(得分:1)

当我使用一些示例数据运行它时,在更改statviolinwidth和不更改的情况下,它都会生成确定的图。您的countallData中的一列吗?

library(ggplot2)

dt <- data.frame(category = rep(letters[1:2], each = 10),
                 response = runif(20),
                 count = rpois(20, 5))

ggplot(dt, aes(x = category, y = response)) + geom_violin()

ggplot(dt, aes(x = category, y = response)) + 
  geom_violin(stat = "identity", aes(violinwidth = 0.1*count))