我试图在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似乎无法正常工作,但密度不准确。当我使用该方法进行绘图并与整个数据集的绘图进行比较时,绘图看起来非常不同。
任何人都知道如何绘制汇总数据?
答案 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()
现在这里是重复值的相同数据,而不是计数:
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()
差别很大,可能是由密度的计算方式引起的。