В ggplot, как заставить аргумент заполнения работать в geom_dotplot()

avatar
user4381526
8 августа 2021 в 23:26
46
1
0

Это мой код:

library(ggplot2)
    olympics <-
readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2021/2021-07-27/olympics.csv')    


olympics <- olympics %>% mutate(medal = as.factor(medal),
                               year =  as.factor(year))
judo <- olympics %>% filter(sport == 'Judo', team == 'Japan') %>% drop_na() %>%
                          select(name, sex, age, team, year,  medal) %>% arrange(year)
 
  ggplot(data = judo) +
    geom_dotplot(aes(x = year, group = year, fill = medal), binwidth = .25) +
    scale_fill_manual(values = c('#b08d57','#FFD700','#C0C0C0'))

Моя проблема в том, что я не могу правильно заполнить точки значениями функции scale_fill_manual().

Источник
user4381526
8 августа 2021 в 23:56
0

Это не работает. Если вы посмотрите на 1964 год, это должно дать мне 4 точки. Когда я удаляю аргумент group, медали не учитываются. У него должно быть 4 золотые медали и одна серебряная медаль.

Ritchie Sacramento
9 августа 2021 в 00:09
1

Используйте geom_dotplot(aes(x = year, fill = medal), binwidth = .25, stackgroups = TRUE, binpositions = "all").

Ответы (1)

avatar
chemdork123
9 августа 2021 в 04:36
0

Вы хотите удалить эстетику group - она ​​переопределяет разделение (группировку), которое естественно происходит при группировке по эстетике fill. Кажется, что эстетика group имеет приоритет над эстетикой fill, поэтому ваша заливка никогда не применяется поверх группы. Ваши данные уже будут естественным образом сгруппированы по годам, поскольку это эстетика x.

О, и я изменил порядок множителя judo$medal, чтобы он соответствовал типичному "Бронза, Серебро, Золото". Следовательно, ваш аргумент для values был изменен на именованный вектор, чтобы обеспечить правильное сопоставление.

judo$medal <- factor(judo$medal, levels=c('Bronze', 'Silver', 'Gold'))

ggplot(data = judo) +
  geom_dotplot(aes(x = year, fill = medal), binwidth = .25) +
  scale_fill_manual(values = c('Bronze'='#b08d57','Gold'='#FFD700','Silver'= '#C0C0C0'))

enter image description here

user4381526
9 августа 2021 в 11:19
0

Удивительно @chemdork123! Спасибо!