【问题标题】:Changing Chart colour scale in loop在循环中更改图表颜色比例
【发布时间】:2019-01-03 19:18:20
【问题描述】:

我有一个数据框,其中的数据按“变量”列中的类别组织。我想为每个类别生成一个单独的 geom_point() 图表,我想根据“变量”列中的类别值以及每个图表的图例来指定图表的颜色。我不想使用 facetting 来做这件事,因为我的实际用例比这个复杂得多。

这里是一些示例代码:

df <- rbind(data.frame(date = 1:100, value = rnorm(100, 0, 1), variable = "a_variable"),    
            data.frame(date = 1:100, value = rnorm(100, 0, 1), variable = "b_variable"))

a_list_of_colours <- list()    
a_list_of_colours[["a_variable"]] <- "red"    
a_list_of_colours[["b_variable"]] <- "blue"

循环 1

a_list_of_charts <- list()   

for(i in 1:length(a_list_of_colours)){

  print(a_list_of_colours[[i]])

  a_list_of_charts[[i]] <- ggplot(df %>% 
                                    filter(variable == names(a_list_of_colours)[i]), 
                                  aes(x = date, y = value, colour = variable)) +
    geom_point(shape = 19, size = 2) +
    scale_colour_manual(values = a_list_of_colours[[names(a_list_of_colours)[i]]])

}

循环 2

a_list_of_charts <- list()

for(i in 1:length(a_list_of_colours)){

  print(a_list_of_colours[[i]])

  a_list_of_charts[[i]] <- ggplot(df %>% 
                                    filter(variable == names(a_list_of_colours)[i]), 
                                  aes(x = date, y = value, colour = variable)) +
    geom_point(data = df, aes(x = date, y = value, colour = variable),
               shape = 19, size = 2, 
               colour = a_list_of_colours[[names(a_list_of_colours)[i]]])
}

循环 3

a_list_of_charts <- list()

for(i in 1:length(a_list_of_colours)){

  print(a_list_of_colours[[i]])

  a_list_of_charts[[i]] <- ggplot() +    
    geom_point(data = df %>% 
                 filter(variable == names(a_list_of_colours)[i]), 
               aes(x = date, y = value, colour = variable),
               shape = 19, size = 2,
               colour = a_list_of_colours[[names(a_list_of_colours)[i]]])
}

我希望这些循环中的任何一个都生成两张图表,一张是红点,一张是蓝点。我主要好奇为什么第一个循环将值传递给scale_colour_manual() 不起作用并且总是产生蓝色图表。但是,我也对解决方案感兴趣。奇怪的是,我无法通过在 geom_point() 中传递变量来生成带有后两个循环的图例。任何想法都非常感谢。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    循环 1

    尝试将您的 ggplot2 软件包版本更新到最新版本(3.1.0),它应该可以正常工作(至少在我的版本上是这样)。怀疑这是由于this change 的强制参数,虽然我不知道足够的基础细节来确定。

    循环 2

    此代码有一个问题:当您在 ggplot()geom_point() 中提供数据参数时,后者将覆盖前者,因此您实际上是在两个图中绘制了完整的数据集。

    a_list_of_charts[[i]] <- ggplot(df %>% 
                                      filter(variable == names(a_list_of_colours)[i]), 
                                    aes(x = date, y = value, colour = variable)) +
      geom_point(data = df, aes(x = date, y = value, colour = variable),
                 shape = 19, size = 2, 
                 colour = a_list_of_colours[[names(a_list_of_colours)[i]]])
    

    循环 3

    此代码用于以正确的颜色显示正确的数据子集。不过,如果您还想要一个图例,那么 Loop 1 是更好的选择(假设您能够更新您的软件包版本)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多