代码之家  ›  专栏  ›  技术社区  ›  Obromios

用ggplot散点图固定调色板

  •  1
  • Obromios  · 技术社区  · 5 年前

    我正在制作一些散点图,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)
    

    此代码生成如下绘图:

    example

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

    我该怎么解决这个问题?

    1 回复  |  直到 5 年前
        1
  •  1
  •   Julius Vainora    5 年前

    一种解决方案包括:

    1. 确保 w 是一个因素
    2. W 在所有数据帧中具有相同的因子级别
    3. 使用 drop = FALSE 在里面 scale_colour_discrete scale_colour_manual .

    例如,

    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)
    

    enter image description here

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