ggplot2:Stat="Identity" 的小提琴图
ggplot2: Violin Plot with Stat="Identity"
我正在尝试使用 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
尝试添加 aes(violinwidth=0.2*count)
,正如 this answer 所建议的那样,得到
> 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
设置为一个常量,但这会使小提琴变成矩形。我该如何解决这个问题?
当我 运行 使用一些样本数据时,它生成的图可以正常使用和不使用 stat
和 violinwidth
的更改。您的 count
是 allData
中的一列吗?
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))
我正在尝试使用 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
尝试添加 aes(violinwidth=0.2*count)
,正如 this answer 所建议的那样,得到
> 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
设置为一个常量,但这会使小提琴变成矩形。我该如何解决这个问题?
当我 运行 使用一些样本数据时,它生成的图可以正常使用和不使用 stat
和 violinwidth
的更改。您的 count
是 allData
中的一列吗?
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))