gpt4 book ai didi

r - ggplot2 中两种不同颜色美学映射的不同调色板

转载 作者:行者123 更新时间:2023-12-04 03:20:26 27 4
gpt4 key购买 nike

我的问题与 this 非常相似和 this还有 this题。我有一个散点图(使用 geom_point ),使用特定的调色板按因子着色。我正在使用 stat_smooth通过按另一个因素分组的点绘制某些平滑线。我希望这些线条使用不同的调色板。

这是一个 Dropbox link to some example data .做一个

currDT <- read.table("SO_data", sep = "|", header = TRUE, strip.white = TRUE)

我通常将我的数据放在 data.table 中,因此您可能会发现更改它也很有帮助。哦,这是我目前使用的配色方案,您可以使用 scale_colour_brewer为了生成你自己的,我只是为了完整性而包括这个。
my_col_scheme <- c("#e41a1c", "#377eb8", "#4daf4a", "#984ea3", "#ff7f00", "#7B8A7B",
"#0B29D6", "#f781bf", "#999999", "black")

希望这已经足够清楚了。下面是一些示例代码:
icorr_elec <- ggplot(currDT,
aes(x = EFP, y = SAPT), na.rm = TRUE) +
geom_point(aes(colour = Anion, shape = Cation), size = 3, alpha = 0.4) +
scale_colour_manual(values = my_col_scheme) +
stat_smooth(method = "lm", formula = y ~ x + 0, aes(linetype = Halide, colour = Halide),
alpha = 0.8, size = 0.5, level = 0) +
scale_linetype_manual(name = "", values = c("dotdash", "F1"),
breaks = c("hal", "non-hal"), labels = c("Halides", "Non-Halides"))

这如何在 ggplot2 中完成?从我收集的其他问题中,我可以手动指定每一行,但我想避免这种情况。

最佳答案

您可以通过对点使用填充点标记并将其映射到 fill 来为线和点获取单独的颜色映射。美观,同时保持线条映射到 colour审美的。填充点标记是编号为 21 到 25 的标记(请参阅 ?pch )。这是一个例子,改编@RichardErickson 的代码:

ggplot(currDT, aes(x = EFP, y = SAPT), na.rm = TRUE) +
stat_smooth(method = "lm", formula = y ~ x + 0,
aes(linetype = Halide, colour = Halide),
alpha = 0.8, size = 0.5, level = 0) +
scale_linetype_manual(name = "", values = c("dotdash", "F1"),
breaks = c("hal", "non-hal"), labels = c("Halides", "Non-Halides")) +
geom_point(aes(fill = Anion, shape = Cation), size = 3, alpha = 0.4, colour="transparent") +
scale_colour_manual(values = c("blue", "red")) +
scale_fill_manual(values = my_col_scheme) +
scale_shape_manual(values=c(21,24)) +
guides(fill = guide_legend(override.aes = list(colour=my_col_scheme[1:8],
shape=15, size=3)),
shape = guide_legend(override.aes = list(shape=c(21,24), fill="black", size=3)),
colour = guide_legend(override.aes = list(linetype=c("dotdash", "F1"))),
linetype = FALSE)

这是我所做的解释:
  • geom_point , 改 colour美到fill .另外,放 colour="transparent" aes 之外.这将摆脱点周围的边界。如果您想要边框,请将其设置为您喜欢的任何边框颜色。
  • scale_colour_manual ,我已将颜色设置为蓝色和红色,但您当然可以将它们设置为您喜欢的任何颜色。
  • 添加 scale_fill_manual使用 fill 设置点的颜色审美的。
  • 添加 scale_shape_manual并将值设置为 21 和 24(分别为实心圆和三角形)。
  • 里面的东西guides()是修改图例。我不知道为什么,但没有这些覆盖,填充和形状的图例是空白的。请注意,我已经设置了 fill="black"shape传说,但它显示为灰色。我不知道为什么,但没有 fill="somecolor" shape传说是空白的。最后,我覆盖了 colour图例以便在颜色图例中包含线型,这让我摆脱了多余的 linetype传奇。我对这个传说并不完全满意,但这是我能想出的最好的方法,而无需求助于特殊用途的grobs。

  • enter image description here

    注意:我改了 color=NAcolor="transparent" , 如 color=NA (在 ggplot2 的第 2 版中)会导致点完全消失,即使您使用具有单独边框和填充颜色的点也是如此。感谢@aosmith pointing this out .

    关于r - ggplot2 中两种不同颜色美学映射的不同调色板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29957669/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com