代码之家  ›  专栏  ›  技术社区  ›  ℕʘʘḆḽḘ

将(有序)因子映射到ggplot中的颜色

  •  0
  • ℕʘʘḆḽḘ  · 技术社区  · 7 年前

    考虑这个例子

    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 回复  |  直到 7 年前
        1
  •  3
  •   Matt L.    7 年前

    您可以使用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 reprex package (v0.2.1)

        2
  •  1
  •   camille    7 年前

    这个 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)
    

    您可以进一步调整颜色比例,使其更适合顺序数据。我经常用彩色啤酒,但也喜欢一些 rcartocolor 规模。在这种情况下,拥有12个级别将使许多连续调色板中可用的颜色数量最大化,尽管Viridis可以使用 ggplot2 (例如) scale_color_viridis_d )将插入以适应这许多级别。

    创建于2018-11-30 reprex package (v0.2.1)

    推荐文章