【问题标题】:Why is ggplot using default colors when others are specified?为什么在指定其他颜色时 ggplot 使用默认颜色?
【发布时间】:2015-02-19 15:09:02
【问题描述】:

我试图让 ggplot2 将直方图的一行显示为与其他颜色不同的颜色。在这方面我是成功的;但是,当指定不同的集合时,ggplot 使用默认颜色。我确定我的代码中有错误,但我无法确定它在哪里。数据和代码如下:

创建数据

library(ggplot2)
set.seed(71185)
dist.x <- as.data.frame(round(runif(100000, min= 1.275, max= 1.725), digits=2))
colnames(dist.x) <- 'sim_con'

开始直方图

ggplot(dist.x, aes(x = sim_con)) +
geom_histogram(colour = "black", aes(fill = ifelse(dist.x$sim_con==1.55, "darkgreen", "firebrick")), binwidth = .01) +
theme(legend.position="none")

结果如下图:

我不想使用默认颜色,而是想使用“深绿色”和“耐火砖”。代码中的错误在哪里?感谢您提供的任何帮助。

【问题讨论】:

    标签: r ggplot2 histogram


    【解决方案1】:

    你离得太近了!

    在您上面的代码中,ggplot 将您的填充解释为数据集中的变量 - 因子 darkgreen 和因子 firebrick - 并且无法知道这些标签是颜色,而不是动物物种的名称。

    如果您将scale_fill_identity() 添加到绘图的末尾,如下所示,它会将这些字符串解释为颜色(身份),而不是数据的特征。

    与@marat 上面的出色答案相比,这种方法的一个好处是:如果您有一个复杂的情节(例如,使用geom_segment(),每个观察都有一个起始值和一个结束值)并且您想在上面应用两个填充比例您可以在数据处理步骤中执行条件逻辑,然后使用scale_fill_identity() 为每个观察值相应地着色。

    ggplot(
      data=dist.x,
      aes(
        x = sim_con,
        fill = ifelse(dist.x$sim_con==1.55, "darkgreen", "firebrick")
      )
    ) +
    geom_histogram(
      colour = "black",
      binwidth = .01
    ) +
    theme(legend.position="none") +
    scale_fill_identity()
    

    【讨论】:

    • 内容丰富的解释。我认为你和马拉的答案都很好地解决了当前的问题。您的解释非常有助于理解语法背后的魔力以及未来的应用。
    • 了解 R 中的非标准评估确实帮助我了解了 hadleyverse 中某些包内部发生的情况:adv-r.had.co.nz/Computing-on-the-language.html 很高兴这有帮助!
    【解决方案2】:

    我认为您不能在aes 中明确设置颜色;您需要在scale_fill_manual 中进行操作,如下例所示:

    ggplot(dist.x, aes(x = sim_con)) +
      geom_histogram(colour = "black", binwidth = .01,aes(fill=(sim_con==1.55))) + 
      scale_fill_manual(values=c('TRUE'='darkgreen','FALSE'='firebrick')) +
      theme(legend.position="none")
    

    【讨论】:

      猜你喜欢
      • 2023-03-30
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 2015-02-17
      • 2021-10-15
      • 2013-02-03
      相关资源
      最近更新 更多