【问题标题】:Link colour with integer ggplot2用整数 ggplot2 链接颜色
【发布时间】:2015-10-22 14:34:34
【问题描述】:

我是 ggplo2 的新手,我无法重现我在原生 plot 函数中使用的东西:基本上我迭代地向绘图添加点,并且我希望添加新点并同时迭代地改变颜色.

MWE:

pts = data.frame(x = rnorm(10), y = rnorm(10))
plot(pts, pch = 19)
for(i in 2:5) {
   pts = data.frame(x = rnorm(10), y = rnorm(10))
   points(pts, col = i, pch = 19)
}

给出:

使用 ggplot2 我有:

pts = data.frame(x = rnorm(10), y = rnorm(10))
p <- ggplot(pts, aes(x,y)) + geom_point()
print(p)
for(i in 2:5) {
   pts = data.frame(x = rnorm(10), y = rnorm(10))
   p <- p + geom_point(data = pts, aes(colour = i))
   print(p)
}

这并没有给出相同的东西。我曾想过使用 scale_colour_hue(5) 而不是 aes(colour=i) 来指定我想要 5 种不同的可区分颜色,但出现错误:

错误:提供给离散刻度的连续值

谢谢!

【问题讨论】:

  • 一般来说,如果你把所有需要以相同方式绘制的数据放在同一个数据框中,ggplot2 效果最好。
  • 不幸的是,在我的真实案例中,数据是迭代生成的,而我希望在每次新生成之后更新绘图而不是等待过程结束

标签: r colors ggplot2


【解决方案1】:

由于您案例的迭代性质,这可能是一个解决方案。我已将迭代添加到数据中,以便将某个点的所有信息包含在相关数据集中。然后我用factor(i) 给它上色。 aes(color=i) 的方法是正确的,但是在迭代结束时 i 等于 5,所有点都被着色为 5(第一次迭代除外,因为它们没有颜色映射。

编辑:创建了一个列“迭代”,其因子级别为每个数据集中的迭代次数,并强制所有级别显示在比例参数中。

set.seed(124)
n_iterations <- 5
pts = data.frame(x = rnorm(10), 
                 y = rnorm(10),
                 iteration=factor(1,levels=1:n_iterations)
)
p <- ggplot(pts, aes(x,y, color=iteration)) + geom_point()+
  scale_colour_discrete(drop=FALSE) + #forces all levels to display
  ylim(c(-2.5,2.5)) #keeps plot limits constant

for(i in 2:5) {
  pts = data.frame(x = rnorm(10), 
                   y = rnorm(10), 
                   iteration=factor(i,levels=1:n_iterations))
  p <- p + geom_point(data = pts)
  print(p)
}

迭代图像:

【讨论】:

  • 几乎不错,但是与数字相关的颜色会发生变化,即如果您查看中间图 3 将不会与绿色相关联。我需要保持这种一致性,因为在迭代时,我确实将点添加到第 i 层和 i-1 层
  • 查看我的编辑 - 我对强制所有因子级别都存在和显示做了一些修改。
  • scale_colour_discrete(drop=FALSE) 与众不同;我试图在factor( 中指定所有级别,但这还不够,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
  • 2018-12-12
  • 2015-01-01
  • 1970-01-01
相关资源
最近更新 更多