【问题标题】:Using a pre-defined color palette in ggplot在 ggplot 中使用预定义的调色板
【发布时间】:2018-06-15 22:59:22
【问题描述】:

有人知道如何在 ggplot 中使用预定义的调色板吗?

我有一个我想使用的颜色向量:

rhg_cols <- c("#771C19", "#AA3929", "#E25033", "#F27314", "#F8A31B", 
              "#E2C59F", "#B6C5CC", "#8E9CA3", "#556670", "#000000")

但是当我试图将它传递给任何事情时

ggplot(mydata, aes(factor(phone_partner_products)), color = rhg_cols) +
  geom_bar()

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    您必须将colour = rhg_cols 放入aes()。据我所知,您想在横坐标上使用因子变量的条形图(在条形图中)应用渐变?然后使用fill - 试试这个:

    ggplot(mydata, aes(factor(phone_partner_products), fill = factor(phone_partner_products))) +
      geom_bar() + 
      scale_fill_manual(values = rhg_cols)
    

    或尝试通过以下方式获得近似副本:

    ggplot(mydata, aes(factor(phone_partner_products), fill = phone_partner_products))) +
      geom_bar() + 
      scale_fill_gradient(low = "#771C19", high = "#000000")
    

    请注意,在第二种情况下,一个连续变量被传递给fill 美学,因此scale_fill_gradient 之后被传递。如果将factor 传递给fill aes,则必须坚持使用scale_fill_manual(values = rhg_cols)

    【讨论】:

    • 在 scale_fill_gradient(low = "#771C19", hi = "#000000") 上应该是“high”而不是“hi”。
    【解决方案2】:

    如果颜色是调色板,请使用scale_colour_manual:

    ggplot(mydata, aes(factor(phone_partner_products), colour = colour_variable)) +
      scale_colour_manual(values = rhg_cols)
    

    【讨论】:

    • 这为我指明了正确的方向,但是 scale_colour_manual() 的参数必须是 values=... 才能使其工作。
    • 只是根据我的经验添加。如果您的矢量已命名(即每个十六进制值都有一个颜色名称),那么您需要在将矢量传递给 scale_color_manual 之前取消其名称,否则它将尝试将名称与颜色变量匹配。所以,它会像scale_colour_manual(values = unname(rhg_cols))
    【解决方案3】:

    首先将颜色添加到您的数据集:

    mydata$col <- rhg_cols
    

    然后将颜色映射到该列并使用scale_colour_identity

    ggplot(mydata, aes(factor(phone_partner_products, colour = col))) + 
      geom_bar() + 
      scale_colour_identity()
    

    【讨论】:

    • mmm ...第一行有一些问题...我至少有 800 行,颜色只有 10 > mydata$col $<-.data.frame(*tmp*, "col", value = c("#771C19", "#AA3929", : 替换有 10 行,数据有 865
    • 当然 factor(phone_partner_products) 只返回 5 个元素,所以 10 种颜色的调色板就足够了。
    • 哦,这是一个调色板。这就是为什么可重现的代码总是有用的原因。
    【解决方案4】:

    由于您想要的颜色是颜色美学中的值,因此您真正想要的是identity 比例,在本例中为scale_fill_identity

     ggplot(mydata, aes(factor(phone_partner_products)), color=rhg_cols) +
       geom_bar() +
       scale_fill_identity())
    

    由于您没有提供数据,我将使用一个稍微不同的示例来使用您的颜色数据:

     rhg_cols <- c("#771C19","#AA3929","#E25033","#F27314","#F8A31B",
                   "#E2C59F","#B6C5CC","#8E9CA3","#556670","#000000")
     mydata <- sample(rhg_cols, 100, replace = TRUE)
     qplot(mydata, fill = mydata) +
       scale_fill_identity()
    


    注意:为了清楚起见,我在示例中省略了+ opts(axis.text.x=theme_text(angle=90))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-22
      • 2020-10-09
      • 1970-01-01
      • 2018-09-29
      • 2012-12-21
      • 2021-05-09
      • 2023-03-18
      • 1970-01-01
      相关资源
      最近更新 更多