使用ggplot散点图修复调色板

时间:2019-01-20 07:00:01

标签: r ggplot2

我正在生成许多散点图,其中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 个答案:

答案 0 :(得分:1)

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

  1. 确保w是一个因素
  2. w在所有数据帧中具有相同的因子水平
  3. drop = FALSEscale_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

因此,即使w仅在较低的图中取0和2值,现在在较低的绘图中对应于2的点都是蓝色,就像较高的图中的单个点一样。