Ggplot2: geom_text () добавляет дополнительные, нежелательные значения на график - PullRequest
2 голосов
/ 21 апреля 2020

У меня, казалось бы, простая проблема, которую я не могу решить: на моем plot появляется слишком много значений. Я хочу видеть только общее количество (tot_q, равное n) один раз и соответствующее значение pc (процентное соотношение для категорий, в которых качество равно 1). Вот мой пример кода:

category <- as.factor(c(1, 2, 3, 3, 2, 2, 1, 2, 4, 4, 1, 3, 2, 2, 2, 1))
quality <- as.factor(c(0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1))
mydata <- data.frame(category, quality)

mydata2<- mydata %>% group_by(category,quality) %>% mutate(count_q = n()) %>%
  group_by(category) %>% mutate(tot_q=n(),pc=count_q*100/tot_q)

myplot <- ggplot(mydata2, aes(x= category, y = pc)) +
  geom_bar(position = 'dodge', stat='identity', fill="lightblue") +
  geom_text(aes(label=round(pc)), position=position_dodge(0.9), vjust=-0.5) +
  geom_text(aes(label=round(tot_q)), nudge_y = 15, col="red")

myplot

Вопрос: почему я получаю значение tot_q дважды (красные цифры)? Кроме того, как я могу скрыть низкий процент (например, в категории 1 я бы хотел видеть только 75%)? Я предполагаю, что это как-то связано с моей предварительной обработкой данных, но я не могу понять, что делать по-другому.

enter image description here

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Это то, что вы после? : filter(quality == 1) в конце ваших манипуляций с данными.

library(ggplot2)
library(dplyr)

mydata2<- 
  mydata %>% 
  group_by(category, quality) %>% 
  mutate(count_q = n()) %>%
  group_by(category) %>% 
  mutate(tot_q = n(),
         pc = count_q * 100 / tot_q)%>% 
  filter(quality == 1)

myplot <- 
  ggplot(mydata2, aes(x= category, y = pc)) +
  geom_bar(position = 'dodge', stat='identity', fill="lightblue") +
  geom_text(aes(label = round(pc)), position=position_dodge(0.9), vjust = -0.5) +
  geom_text(aes(label = round(tot_q)), nudge_y = 15, col = "red")

myplot

enter image description here

0 голосов
/ 21 апреля 2020

с использованием данных подмножества (quality = 1) для geom_text()

library(ggplot2)
library(dplyr)
category <- as.factor(c(1, 2, 3, 3, 2, 2, 1, 2, 4, 4, 1, 3, 2, 2, 2, 1))
quality <- as.factor(c(0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1))
mydata <- data.frame(category, quality)

mydata2<- mydata %>% group_by(category,quality) %>% mutate(count_q = n()) %>%
  group_by(category) %>% mutate(tot_q=n(),pc=count_q*100/tot_q)

myplot <- ggplot(mydata2, aes(x= category, y = pc)) +
  geom_bar(position = 'dodge', stat='identity', fill="lightblue") +
  geom_text(data = filter(mydata2, quality == 1),
    aes(label=round(pc)), position=position_dodge(0.9), vjust=-0.5) +
  geom_text(data = filter(mydata2, quality == 1),
    aes(label=round(tot_q)), nudge_y = 15, col="red")

myplot

Создано в 2020-04-21 по представ пакет (v0.3.0)

...