gghighlight в кластерной (сгруппированной) гистограмме в R - PullRequest
2 голосов
/ 09 марта 2020

Мне нужно использовать gghighlight на кластеризованной гистограмме в R, чтобы выделить только один столбец. Мой код и примерные данные выглядят так:

library(tidyr)
library(ggplot2)
dat <- data.frame(country=c('USA','Brazil','Ghana','England','Australia'), Stabbing=c(15,10,9,6,7), Accidents=c(20,25,21,28,15), Suicide=c(3,10,7,8,6))
dat.m <- melt(dat, id.vars='country')
dat.g <- gather(dat, type, value, -country)
ggplot(dat.g, aes(type, value)) + 
  geom_bar(aes(fill = country), stat = "identity", position = "dodge") +
  gghighlight(type == "Accidents" & country == "Brazil")

Но это доставляет мне такую ​​неловкость

graph

Как я могу gghighlight выделить только одну полосу одна группа (таким образом, объединяя два условия для двух дискретных переменных)?

Ответы [ 2 ]

3 голосов
/ 10 марта 2020

Вот два альтернативных варианта выделения одного столбца на графике этого типа:

1) создайте новую переменную (с именем highlight ниже) и заполните ее (и, если хотите, используйте цвета линий для цветопередачи по странам)

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

2 голосов
/ 10 марта 2020

Я думаю, что gghighlight не построен для такого рода сюжета - пока нет! Вы могли бы подать запрос на функцию? Хотя немного неясно, очень ли полезна эта визуализация. Gghighlight всегда dr aws все - это делает "странные" тени при уклонении.

Если вы хотите продолжать использовать gghightlight, возможно, попробуйте фасетирование, которое они предлагают в их виньетка

Предложение - Используйте фасеты:

(используя mtcars в качестве примера)

library(tidyverse)
library(gghighlight)

mtcars2 <- mtcars %>% mutate(cyl = as.character(cyl), gear = as.character(gear))
ggplot(mtcars2, aes(cyl, disp, fill = gear))  +
  geom_col() + #no dodge
  gghighlight(cyl == "4") + #only one variable
  facet_grid(~ gear) #the other variable is here
#> Warning: Tried to calculate with group_by(), but the calculation failed.
#> Falling back to ungrouped filter operation...

Создано в 2020-03-09 пакетом prex (v0.3.0)

Или, здесь без gghighlight, в более традиционном подходе поднабора. Вам нужно создать подмножество данных, которое содержит строки для каждой группы, по которой вы хотите уклониться, в данном случае «цил» и «шестеренка». Я заменяю несущественные данные на «NA», вы также можете использовать «0».

library(tidyverse)

mtcars2 <- mtcars %>% 
  mutate(cyl = as.character(cyl), gear = as.character(gear)) %>% 
  group_by(cyl, gear) %>% 
  summarise(disp = mean(disp))

subset_mt <- mtcars2 %>% mutate(highlight = if_else(cyl == '4' & gear == '3', disp, NA_real_))

ggplot()  +
  geom_col(data = mtcars2, aes(cyl, disp, group = gear), fill = 'grey', alpha = 0.6, position = 'dodge') +
  geom_col(data = subset_mt, aes(cyl, highlight, fill = gear), position = 'dodge') 
#> Warning: Removed 7 rows containing missing values (geom_col).

Создано в 2020-03-10 пакетом Представить (v0.3.0)

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