сопоставление (упорядоченных) факторов с цветами в ggplot - PullRequest
0 голосов
/ 30 ноября 2018

Рассмотрим этот пример

data_frame(mylabel = c('month 18',
                       'month 19',
                       'month 20',
                       'month 21',
                       'month 22'),
           value = c(5,10,-2,2,0),
           time = c(1,2,3,4,5)) %>% 
  ggplot(aes( x= time, y = value, color = mylabel)) +
  geom_point(size = 7)

enter image description here

Здесь вы можете видеть, что переменная mylabel имеет естественный порядок: месяц 18 предшествует месяцу19 и т. Д.

Однако это естественное упорядочение не сохраняется цветами, выбранными ggplot.В моем реальном наборе данных у меня есть около 50 различных месяцев, и я хотел бы использовать цветовую шкалу, которая делает это увеличение более интуитивным (скажем, от холодного до горячего).

Как я могу это сделать?Спасибо!

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Функция as_factor позволяет forcats упорядочивать уровни по мере их появления, вместо того, чтобы сначала указывать все, которые начинаются с "1", затем все, которые начинаются с "2" и т. Д. Это уклоняется от проблемы с наличием месяцев от 1 до12.

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

library(dplyr)
library(ggplot2)

set.seed(1234)
df <- data_frame(mylabel = paste("month", 1:12),
                 value = rnorm(12),
                 time = 1:12)

df_fact <- df %>%
  mutate(mylabel = forcats::as_factor(mylabel))

levels(df_fact$mylabel)
#>  [1] "month 1"  "month 2"  "month 3"  "month 4"  "month 5"  "month 6" 
#>  [7] "month 7"  "month 8"  "month 9"  "month 10" "month 11" "month 12"

ggplot(df_fact, aes(x = time, y = value, color = mylabel)) +
  geom_point(size = 7)

Вы можете дополнительно настроить цветовую шкалу для одногоэто лучше подходит для последовательных данных.Я часто использую Color Brewer, но также люблю некоторые весы rcartocolor.В этом случае наличие 12 уровней максимально увеличит количество цветов, доступных во многих последовательных палитрах, хотя шкалы Viridis, которые поставляются с ggplot2 (например, scale_color_viridis_d), будут интерполироваться, чтобы соответствовать этому множеству уровней.

Создано в 2018-11-30 пакетом Представление (v0.2.1)

0 голосов
/ 30 ноября 2018

Вы можете использовать цветовую шкалу viridis или другую, которая лучше окрашена, чтобы указать порядок.

Для аналогичных цветовых шкал предусмотрено несколько параметров (опция = от «A» до «D»).Измените заказ на direction = -1

Я добавил шаг, чтобы улучшить порядок, если месяцы указаны неверно.Это работает, но я уверен, что есть более простой способ.Извлеките номер месяца из имени (нужно преобразовать из char в numeric), а затем разложите его, чтобы использовать правильный порядок.

library(tidyverse)
data_frame(mylabel = paste("month", 1:10),
             value = rnorm(length(mylabel)),
             time = seq_along(mylabel)) %>% 
    mutate(month_number = factor(as.numeric(gsub("month ([0-9]+)", "\\1", mylabel)))) %>% 
  ggplot(aes( x= time, y = value, color = month_number)) +
  geom_point(size = 7) +
  scale_color_viridis_d(option = "B", direction = -1)

Создано в 2018-11-30 пакетом Представ (v0.2.1)

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