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

2023-12-27

我的问题非常类似于this https://stackoverflow.com/questions/15363035/ggplot2-how-to-specify-multiple-fill-colors-for-points-that-are-connected-by-li and this https://stackoverflow.com/questions/14757394/overplotting-with-different-colour-palettes-in-ggplot2并且this https://stackoverflow.com/questions/9427950/how-can-i-use-different-color-palettes-for-different-layers-in-ggplot2问题。我有一个散点图(使用geom_point)使用特定的调色板按某个因素着色。我在用着stat_smooth通过点绘制某些平滑线,按以下方式分组another因素。我希望这些线条使用不同的调色板。

这里有一个Dropbox 链接到一些示例数据 https://www.dropbox.com/s/08zponb87c7mq59/SO_data?dl=0。只需做一个

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)

这是我所做的解释:

  1. In geom_point, 改变colour审美到fill。另外,放colour="transparent"在外面aes。这将消除点周围的边界。如果您想要边框,请将其设置为您喜欢的边框颜色。
  2. In scale_colour_manual,我已将颜色设置为蓝色和红色,但是您当然可以将它们设置为您喜欢的任何颜色。
  3. Add scale_fill_manual使用以下命令设置点的颜色fill审美的。
  4. Add scale_shape_manual并将值设置为 21 和 24(分别为实心圆形和三角形)。
  5. 里面所有的东西guides()就是修改图例。我不知道为什么,但如果没有这些覆盖,填充和形状的图例是空白的。请注意,我已经设置了fill="black"为了shape图例,但它显示为灰色。我不知道为什么,但没有fill="somecolor" the shape图例为空白。最后,我重写了colour图例以便将线型包含在颜色图例中,这使我能够摆脱多余的linetype传奇。我对这个传说并不完全满意,但这是我在不诉诸特殊用途的情况下能想到的最好的。

NOTE:我变了color=NA to color="transparent", as color=NA(在 ggplot2 的版本 2 中)会导致点完全消失,即使您使用具有单独边框和填充颜色的点也是如此。感谢@aosmith指出这一点 https://stackoverflow.com/questions/42564379/how-can-i-use-different-color-or-linetype-aesthetics-in-same-plot-with-ggplot.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ggplot2 中两种不同颜色美学映射的不同调色板 的相关文章

随机推荐