【问题标题】:Fix colour palette with ggplot scatter plot使用 ggplot 散点图修复调色板
【发布时间】:2023-03-18 00:27:01
【问题描述】:

我正在制作许多散点图,u-v 值具有第三维 w,只能取 3 个值 (0,1,2)。我希望我的每个图表都有一个恒定的调色板,因此 3 个值在每个图表中始终具有相同的颜色。但是,我正在为这些值分配不同的颜色。一个例子是这样的:

library(ggplot2)
library(gridExtra)
u <- c(1.0968145, 0.2566922, 2.6884111, 2.3855156, 0.8794000, 2.4317190)
v <- c(-0.3252739, 0.9596294, -1.4270491, 0.7009061, 0.3631149, 1.8298008)
w <- c(1, 0, 1, 1, 1, 2)
df1 <- data.frame(u, v, w)
p1 <- ggplot(df1, aes(x=u, y=v, color=w )) + geom_point(show.legend = FALSE)
u <- c(0.9827588, 2.2715139, 1.0160009, -1.0461050, 0.0208908, 2.5948499)
v <- c(1.6068334, 0.7113232, 2.6927960, 3.4466515, 0.7541632, -0.2872779)
w <- c(0, 1, 0, 0, 0, 1))
df2 <- data.frame(u, v, w)
p2 <- ggplot(df2, aes(x=u, y=v, color=w )) + geom_point(show.legend = FALSE)
grid.arrange(p1, p2)

这段代码产生这样的情节:

现在第一帧包含所有三个值,这些值显示在顶部图中。该图中最右上角的点 (2.43, 1.83) 的值为 2,显示为浅蓝色。第二帧只有值0和1,但下图显示了这一帧,可以看出左下角的两个点,其值为1,也编码为浅蓝色。

我该如何解决这个问题?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    一个解决方案包括以下内容:

    1. 确保w 是一个因素
    2. w 在所有数据帧中具有相同的因子水平
    3. scale_colour_discretescale_colour_manual 中使用drop = FALSE

    例如,

    w <- c(1, 0, 1, 1, 1, 2)
    df1 <- data.frame(u, v, w)
    df1$w <- factor(df1$w) # New
    p1 <- ggplot(df1, aes(x = u, y = v, color = w )) + geom_point(show.legend = FALSE) +
      scale_colour_discrete(drop = FALSE) # New
    u <- c(0.9827588, 2.2715139, 1.0160009, -1.0461050, 0.0208908, 2.5948499)
    v <- c(1.6068334, 0.7113232, 2.6927960, 3.4466515, 0.7541632, -0.2872779)
    w <- c(0, 2, 0, 0, 0, 2) # Switched from 1 to 2
    df2 <- data.frame(u, v, w)
    df2$w <- factor(df2$w, levels = c("0", "1", "2")) # New
    p2 <- ggplot(df2, aes(x = u, y = v, color = w )) + geom_point(show.legend = FALSE) +
      scale_colour_discrete(drop = FALSE) # New
    grid.arrange(p1, p2)
    

    所以,现在在下图中对应于 2 的点是蓝色的,就像上图中的那个单点一样,即使 w 在下图中只取值 0 和 2。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      • 2021-09-16
      • 2011-02-24
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      相关资源
      最近更新 更多