ggplot中的十六进制颜色未按预期着色

3

编辑:

我的问题可以归结为这样:

“如何让ggplot使用十六进制颜色?”

MrFick的答案非常好。

我的原始问题有一个可怕的拼写错误(请阅读评论)。我建议不要删除这个有缺陷的问题,只需不要阅读下面的任何内容,然后阅读已接受的解决方案。谢谢。

:编辑结束

我绘制了几个geom_segment层,以制作看起来像垂直条的图形。

p <- p + geom_segment(data=DF_for_plotting, aes(x=value[1], xend=value[2]-0.001, y=1, yend=1, colour="green"), size=10)
p <- p + geom_segment(data=DF_for_plotting, aes(x=value[2], xend=value[3]-0.001, y=1, yend=1, colour="blue"), size=10)
p <- p + geom_segment(data=DF_for_plotting, aes(x=value[3], xend=value[4]-0.001, y=1, yend=1, colour="red"), size=10)
p

这给了我:

enter image description here

由于某些原因,当我尝试将red替换为"#CC6666",将green替换为"#9999CC",并将blue替换为"#66CC99"时,出现问题。
q <- ggplot()
q <- q + geom_segment(data=DF_for_plotting, aes(x=value[1], xend=value[2]-0.001, y=1, yend=1, colour="#66CC99"), size=10)
q <- q + geom_segment(data=DF_for_plotting, aes(x=value[2], xend=value[3]-0.001, y=1, yend=1, colour="#9999CC"), size=10)
q <- q + geom_segment(data=DF_for_plotting, aes(x=value[3], xend=value[4]-0.001, y=1, yend=1, colour="#CC6666"), size=10)

我得到:

enter image description here

每次绘图后我是否需要重置颜色?为什么需要这样做?

(顺便说一下,我也在使用Shiny,动态地制作了一组6个图。如果这与环境中颜色的定义有关,我可能会遇到一些额外的问题。)

任何帮助都将不胜感激。

数据位于此处,代码在此处:

library(ggplot2)
library(gridExtra)

#DF_for_plotting lives here: https://www.dropbox.com/s/6hkc3mth9oimlk5/DF_for_plotting.csv?dl=0

p <- ggplot()
p <- p + geom_segment(data=DF_for_plotting, aes(x=value[1], xend=value[2]-0.001, y=1, yend=1, colour="green"), size=10)
p <- p + geom_segment(data=DF_for_plotting, aes(x=value[2], xend=value[3]-0.001, y=1, yend=1, colour="blue"), size=10)
p <- p + geom_segment(data=DF_for_plotting, aes(x=value[3], xend=value[4]-0.001, y=1, yend=1, colour="red"), size=10)

q <- ggplot()
q <- p + geom_segment(data=DF_for_plotting, aes(x=value[1], xend=value[2]-0.001, y=1, yend=1, colour="#66CC99"), size=10)
q <- p + geom_segment(data=DF_for_plotting, aes(x=value[2], xend=value[3]-0.001, y=1, yend=1, colour="#9999CC"), size=10)
q <- p + geom_segment(data=DF_for_plotting, aes(x=value[3], xend=value[4]-0.001, y=1, yend=1, colour="#CC6666"), size=10)

grid.arrange(p,q, ncol=2)

你的 q 代码中有一个错别字。你把它加到了 p 上,这就是为什么你仍然看到颜色名称的原因。 - MrFlick
哎呀!谢谢指出!我会修复它的。 - tumultous_rooster
1个回答

7

如果您想在geom_segment中指定一个文字颜色值,不应将其包含在aes()中。例如,使用此测试数据:

DF_for_plotting <- data.frame(
    variable=rep("StrpCnCor",4),
    value=c(0, 50.79330935, 81.127731, 100)
)

您可以做以下事情。
ggplot() +
    geom_segment(data=DF_for_plotting, aes(x=value[1], xend=value[2]-0.001, y=1, yend=1), colour="green", size=10) +
    geom_segment(data=DF_for_plotting, aes(x=value[2], xend=value[3]-0.001, y=1, yend=1), colour="blue", size=10) +
    geom_segment(data=DF_for_plotting, aes(x=value[3], xend=value[4]-0.001, y=1, yend=1), colour="red", size=10)

在此输入图片描述

或使用十六进制颜色

ggplot() +
    geom_segment(data=DF_for_plotting, aes(x=value[1], xend=value[2]-0.001, y=1, yend=1), colour="#9999CC", size=10) +
    geom_segment(data=DF_for_plotting, aes(x=value[2], xend=value[3]-0.001, y=1, yend=1), colour="#66CC99", size=10) +
    geom_segment(data=DF_for_plotting, aes(x=value[3], xend=value[4]-0.001, y=1, yend=1), colour="#CC6666", size=10)

这里输入图片描述

虽然您没有将任何内容映射到颜色美学上,但不会提供图例。

当您将其放入 aes() 中时,您并未指定文字值,而是只是指定要与颜色关联的文本值。无论您使用 aes(color="red") 还是 aes(color="determination"),它都只会将其视为文字字符值,并使用自己的颜色调色板来分配颜色。 您可以使用scale_fill_manual指定自己的颜色。例如

ggplot() +
    geom_segment(data=DF_for_plotting, aes(x=value[1], xend=value[2]-0.001, y=1, yend=1, colour="a"), , size=10) +
    geom_segment(data=DF_for_plotting, aes(x=value[2], xend=value[3]-0.001, y=1, yend=1, colour="b"), , size=10) +
    geom_segment(data=DF_for_plotting, aes(x=value[3], xend=value[4]-0.001, y=1, yend=1, colour="c"),  size=10) + 
    scale_color_manual(values=c(a="green",b="blue",c="red"))

enter image description here

ggplot() +
    geom_segment(data=DF_for_plotting, aes(x=value[1], xend=value[2]-0.001, y=1, yend=1, colour="a"), , size=10) +
    geom_segment(data=DF_for_plotting, aes(x=value[2], xend=value[3]-0.001, y=1, yend=1, colour="b"), , size=10) +
    geom_segment(data=DF_for_plotting, aes(x=value[3], xend=value[4]-0.001, y=1, yend=1, colour="c"),  size=10) + 
    scale_color_manual(values=c(a="#9999CC",b="#66CC99",c="#CC6666"))

enter image description here

在这里,我将三个组分别称为“a”、“b”和“c”,但如果您愿意,也可以称其为“绿色”、“蓝色”和“红色”--只是看起来奇怪,要有一个告诉您绿色是什么颜色的图例。


感谢您对一个有缺陷的问题给出了出色的答案。我很惊讶看到color并不是那么美观。我需要去阅读《图形语法》这本书,看看为什么它不是这样。 - tumultous_rooster
颜色是审美的一部分;在审美意义上,它有着不同的含义。最后两个图使用了aes(color=),这并不是你放置颜色值的地方。 - MrFlick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接