Как добавить метки на график facet_wrap (ed) geom_count? - PullRequest
0 голосов
/ 05 апреля 2019

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

(редактирование)

Мой код:

Category1 <- c('A','B','C','A','B','C','A','B','C','A','B','C','A','B','C','A','B','C','A','B')
Category2 <- c('W','V','W','V','W','V','W','V','W','V','W','V','W','V','W','V','W','V','W','V')
Class <- c(1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4)

df <- data.frame(Category1, Category2, Class)


g <- ggplot(df, aes(Category1, Category2))

g <- g + facet_wrap(Class ~ ., nrow = 3) + geom_count(col="tomato3", show.legend=F) + scale_size_continuous(range = c(5, 10))
labs(subtitle="Count Plot", y="Category2", x="Category1", title="Cat1 vs Cat2")

g

g2 <-  g + geom_text(data=ggplot_build(g)$data[[1]], aes(x, y, label=n), size=2) #+ scale_size(range = c(5, 15))
g2

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

enter image description here

1 Ответ

1 голос
/ 05 апреля 2019

Проблема в том, что ваш код, использующий данные ggplot_build, не имеет тех же категорий, что и оригинал. Вам необходимо создать данные подсчета перед использованием и использовать их для построения графиков.

Создать данные подсчета

library(tidyverse)
df_count <- df %>%
    count(Class, Category1, Category2)

Участок

Есть два способа включить эти новые данные.

Метод 1

Первый пример, который я показываю, - это использование df и df_count. Этот метод минимально изменит ваш код:

g <- ggplot(df, aes(Category1, Category2))

g <- g + facet_wrap(Class ~ ., nrow = 3) + geom_count(col="tomato3", show.legend=F) + 
    geom_text(data = df_count, aes(Category1, Category2, label=n), size=2) + 
    scale_size_continuous(range = c(5, 10)) + 
    labs(subtitle="Count Plot", y="Category2", x="Category1", title="Cat1 vs Cat2")
g

Добавлена ​​строка geom_text(data = df_count, aes(Category1, Category2, label=n), size=2) +.

Метод 2

Этот метод использует только данные подсчета. Он использует geom_point() вместо geom_count() и изменяет размер, используя переменную n. Этот метод, вероятно, лучше с точки зрения читабельности кода.

g_alternative <- ggplot(df_count, aes(Category1, Category2,  label = n)) + 
    facet_wrap(Class ~ ., nrow = 3) + 
    geom_point(col="tomato3", aes(size = n),  show.legend=F) + 
    geom_text() + 
    scale_size_continuous(range = c(5, 10)) + 
    labs(subtitle="Count Plot", y="Category2", x="Category1", title="Cat1 vs Cat2")
g_alternative

Вывод выглядит так:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...