【问题标题】:ggplot wrong color assignmentggplot错误的颜色分配
【发布时间】:2013-02-18 10:49:58
【问题描述】:

我实现了以下函数来绘制 ggplot 使用的不同颜色。它们的功能还绘制图例中的十六进制颜色值。但是,不知何故,颜色和十六进制值的分配是错误的,我不明白为什么。我在将十六进制颜色添加到数据框data 之前对它们进行了排序,然后在 ggplot2 函数中使用。我认为这可以解决问题,但事实并非如此。我还创建了矢量col,其中包含我实际上想要作为图例的十六进制以及 rgb 颜色值,但我也在努力让它工作

ggplot_colors <- function(n, size=8, alpha=1) {
    library(grDevices)
    hues = seq(15, 375, length=n+1)
    cols_hex <- sort(hcl(h=hues, l=65, c=100)[1:n])
    cols_rgb <- col2rgb(cols_hex)
    cols_rgb <- apply(cols_rgb, 2, function(x){paste(x, collapse=",")})
    cols <- paste(cols_hex, cols_rgb, sep="; ")
    data <- data.frame(x=1:length(cols), 
                       y=1:length(cols), 
                       cols_hex=cols_hex, 
                       cols_rgb=cols_rgb, 
                       cols=cols)
    ggplot(NULL) +
      geom_point(data=data, 
                 aes(x=x, y=y, colour=cols_hex), size=size, alpha=alpha)
}

ggplot_colors(15, 8, 1)

在图例中,作为 RGB 值 (248, 118, 109) 和十六进制值 F8766D 的红色被分配了十六进制值 00B0F6

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    由于您想为参数colour= 提供颜色名称并为此参数显示一个图例,您应该在函数的最后一行添加scale_colour_identity()。此比例确保提供的值将被解释为实际颜色值。在函数scale() 中添加参数breaks=cols_hex 将确保图例中名称的顺序。

    ggplot(NULL) +     
    geom_point(data=data, aes(x=x, y=y, colour=cols_hex), size=size, alpha=alpha) + 
            scale_colour_identity(guide="legend",breaks=cols_hex)
    

    【讨论】:

    • 是的,这似乎有效。我从 sort(hcl(h=hues, l=65, c=100)[1:n]) 中删除了排序,以便图中的颜色以“自然”的方式显示。但是,在图例中,颜色按字母顺序排序。是否有可能以某种方式匹配情节和图例顺序?
    • 更新了我的解决方案。如果您在 cols_hex 中没有函数 sort(),这将起作用
    • 是的,完美。这就是我试图得到它的方式。非常感谢你! :)
    猜你喜欢
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-17
    相关资源
    最近更新 更多