ggplot 中的十六进制颜色未按预期着色
Hexadecimal colors in ggplot not colored as expected
编辑:
我问了一个问题,归结为:
"How can I get ggplot to use hexadecimal colors?"
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
这给了我:
出于某种原因,当我尝试将 red
替换为 "#CC6666"
时,将 green
替换为 "#9999CC"
,将 blue
替换为 [=19] =],因此,
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)
我得到:
每次绘图后我是否需要以某种方式重置颜色?为什么我需要这样做?
(FFIW,我也在 Shiny 工作,在那里我动态地制作了一组 6 个图。如果这是一个与环境中颜色定义方式相关的问题,我可能会感到额外的痛苦.)
如有任何帮助,我们将不胜感激。
数据存在 here,代码在这里:
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)
如果要在 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()
中时,你并没有指定一个字面值,你只是指定一个与颜色相关联的字面值,如果你使用 [=17= 并不重要] 或 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"))
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"))
这里我调用了三个组 "a", "b", 和 "c" 但你也可以调用 "green","blue","red" 如果你愿意的话——有一个告诉你什么颜色是绿色的图例似乎很奇怪。
编辑:
我问了一个问题,归结为:
"How can I get ggplot to use hexadecimal colors?"
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
这给了我:
出于某种原因,当我尝试将 red
替换为 "#CC6666"
时,将 green
替换为 "#9999CC"
,将 blue
替换为 [=19] =],因此,
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)
我得到:
每次绘图后我是否需要以某种方式重置颜色?为什么我需要这样做?
(FFIW,我也在 Shiny 工作,在那里我动态地制作了一组 6 个图。如果这是一个与环境中颜色定义方式相关的问题,我可能会感到额外的痛苦.)
如有任何帮助,我们将不胜感激。
数据存在 here,代码在这里:
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)
如果要在 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()
中时,你并没有指定一个字面值,你只是指定一个与颜色相关联的字面值,如果你使用 [=17= 并不重要] 或 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"))
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"))
这里我调用了三个组 "a", "b", 和 "c" 但你也可以调用 "green","blue","red" 如果你愿意的话——有一个告诉你什么颜色是绿色的图例似乎很奇怪。