Маркируйте коробку с количеством подгрупп и наблюдений на коробку - PullRequest
1 голос
/ 12 февраля 2020

Я хочу создать коробку, в которой я помечаю каждую коробку как количеством наблюдений, которые относятся к этой ячейке, так и количеством подгрупп, которые относятся к этой ячейке

Я могу приблизиться к тому, что хочу с помощью следующего кода с использованием набора данных diamonds, включенного в пакет ggplot2

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)

. Показывает, что в блоке присутствует 7 цветовых групп, относящихся к Fair-I1

. В последнем примере будут отображаться как 7 (количество цветов), так и 210 (количество наблюдений) под или над этим полем на графике

1 Ответ

2 голосов
/ 12 февраля 2020

Вы можете заранее суммировать данные и передать сводные данные в 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))

enter image description here

...