получение дискретных переменных, которые всегда отображаются в одном цвете с помощью viridis и ggplot - PullRequest
0 голосов
/ 28 апреля 2019

Я делаю несколько графиков, которые содержат одинаковые 4 дискретных значения: неизвестно, Отрицательно, Нейтрально, Положительно.

Однако не все наборы данных содержат все дискретные значения, и поэтому

на графике 1, неизвестный = желтый

на графике 2, неизвестный = фиолетовый и т. Д. *

Как настроить его так, чтобы неизвестный всегда = желтый, отрицательный = фиолетовый...

ниже код, который я использую

library(viridis)
p <- ggplot() +
  geom_polygon(data = spdfMelbSent_fortified2.1, aes(fill = sentiment, x = long, y = lat, group = group) , size= 0, alpha=1) +
  theme_void() +
  scale_fill_viridis(discrete = TRUE, breaks=c('unknown','Negative','Neutral','Positive'), name="sentiment", guide =   guide_legend( keyheight = unit(3, units = "mm"), keywidth=unit(12, units = "mm"), label.position = "bottom",       title.position = 'top', nrow=1) ) +
  labs(
    title = "Melbourne and Geelong",
    subtitle = "Sentiment 27th April" 

  ) +
  theme(
    text = element_text(color = "#22211d"), 
    plot.background = element_rect(fill = "#f5f5f2", color = NA), 
    panel.background = element_rect(fill = "#f5f5f2", color = NA), 
    legend.background = element_rect(fill = "#f5f5f2", color = NA),

    plot.title = element_text(size= 22, hjust=0.01, color = "#4e4d47", margin = margin(b = -0.1, t = 0.4, l = 2, unit = "cm")),
    plot.subtitle = element_text(size= 17, hjust=0.01, color = "#4e4d47", margin = margin(b = -0.1, t = 0.43, l = 2, unit = "cm")),
    plot.caption = element_text( size=12, color = "#4e4d47", margin = margin(b = 0.3, r=-99, unit = "cm") ),

    legend.position = c(0.7, 0.09)
  ) +
  coord_map()
p 

1 Ответ

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

Я просто копирую свой комментарий как ответ, чтобы пометить этот вопрос как ответивший.

Похоже, вам не хватает limits в вашей шкале заполнения, которая определяет возможные значения и их порядок.

Добавление limits = c("unknown", "Negative", "Neutral", "Positive") в вызове scale_fill_viridis() может устранить несоответствия на нескольких участках, где один или несколько уровней были отброшены.

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