我想制作一个箱形图,在其中用与该框相关的观察数和与该框相关的子组数标记每个框
使用ggplot2软件包中包含的diamonds数据集,通过以下代码我可以接近我想要的东西
data("diamonds")
n_fun <- function(x){
return(data.frame(y = 1,
label = length(x)))
}
ggplot(diamonds, aes(x=cut, y=price, fill=clarity)) +
geom_boxplot(position = position_dodge2(width=0.75, preserve='single')) +
theme_bw() +
stat_summary(fun.data = n_fun, geom = "text",aes(group=clarity),hjust = 0.5, position = position_dodge(0.6))
这给了我一个图,其中显示了每个“盒子”的观察数 我想做的是既显示观测值的数量,又在每个框中显示颜色的数量,例如
Fair_I1<-subset(diamonds, cut=="Fair" & clarity=="I1")
table(Fair_I1$color)
表明与Fair-I1有关的框中存在7个颜色组
因此,最后一个示例将在绘图中此框的上方或下方显示7(颜色数)和210(观察值数)
答案 0 :(得分:2)
您可以预先汇总数据,然后将汇总数据传递给geom_text()
。在这里,我将这些值折叠到一个标签中,但是,例如,如果要在顶部使用一组数字而在底部使用另一组数字,则可以独立地将它们放置在不同的图层上。
library(ggplot2)
library(dplyr)
labeldat <- diamonds %>%
group_by(cut, clarity) %>%
summarise(labels = paste(n(), n_distinct(color), sep = "\n"))
ggplot(diamonds, aes(x=cut, y=price, fill=clarity)) +
geom_boxplot(position = position_dodge2(width=0.75)) +
theme_bw() +
geom_text(data = labeldat, aes(x = cut, y = -250, label = labels), hjust = 0.5, position = position_dodge2(width = .75))