【问题标题】:How do I plot more than one series in the same R scatterplot?如何在同一个 R 散点图中绘制多个系列?
【发布时间】:2011-05-26 11:12:39
【问题描述】:

我经常在 Excel 中使用散点图将一个时间序列与另一个时间序列可视化,但由于最近的数据更相关,我对最近的时间段使用不同的亮点:

在这种情况下,月、周和今天的图只是同一时间序列的不同(最近)切片,因此该图表中基本上有四个叠加图。我怎样才能在 R 中做同样的事情?我到目前为止:

但我想复制我在 excel 中的内容。如何在 R 中向同一图表添加新图?

或者我什至可以更进一步,使用 R 图中的 col 属性来不断增加颜色直到今天的值,从而避免这些谨慎的步骤?我该怎么做?

【问题讨论】:

标签: r charts


【解决方案1】:

您可以使用较低级别的绘图功能points() 将点添加到已经存在的绘图中。它的工作方式与您通过plot() 创建散点图的方式完全相同,只是它向当前使用的图添加点。

例如:

plot(1:10)
points(10:1,col="red")

编辑:

按照 Chi 的建议,使用 rgb() 进行颜色处理的一种方法。我喜欢创建一个值在 0 到 1 之间的虚拟变量,并将其用作颜色的标量。例如:

x <- rnorm(100)
y <- 0.5*x + rnorm(100)
z <- 0.5*y + rnorm(100)

dum <- (z - min(z)) / (max(z) - min(z))

plot(x,y,col=rgb(1-dum*0.4,1-dum*0.8,1-dum*0.8),pch=16)

这会使点更红,因为它们具有更高的 z 值。当然你可以把min(z)max(z)改成你感兴趣的范围。

【讨论】:

  • 非常感谢。这很好用。知道如何逐点不断地改变颜色吗?
  • @Thomas 查看RColorBrewer 以获得一般颜色主题(尤其是顺序调色板)和rgb()col2rgb() 基本函数来改变颜色,例如根据 x 轴上的值。也可以使用 Alpha 混合,例如plot(replicate(2, rnorm(1000)), pch=19, col="#FF737350").
【解决方案2】:

这是一个使用ggplot 进行操作的框架示例:

library(ggplot2)

day <- 1:100
dat <- data.frame(
  day=day,
  x = day+(1+rnorm(100, 0, 10)),
  y = 5 + day+(1+rnorm(100, 0, 10)),
  when = cut(day, 5)
)

ggplot(dat, aes(x=x, y=y, colour=when)) + geom_point()

对于平滑的颜色:

ggplot(dat, aes(x=x, y=y, colour=day)) + geom_point() + 
    scale_colour_gradient(low="pink", high="red")

【讨论】:

  • @Andrie 好的,谢谢。这是一个相关的问题。我应该直接转向 ggplot 而不是学习 R 的原生图表吗?
  • @thomas,这取决于个人选择。我的选择是直接学习 ggplot,因为我喜欢它的语法一致性。但它有自己的学习曲线。
  • 好的,我想你已经用你的例子回答了关于 native v ggplot 的问题。很棒的东西。
  • 我建议先学习基础 R 图形。你的图表一开始不会像 ggplots 那样漂亮,但它非常灵活,可以让你做几乎任何你想做的事情。学习曲线也更容易。不过,ggplot 也是一个学习的好主意。
  • 学习 ggplot 的另一个好处是您可以学习所有类型的图(散点图、条形图、线条等)的一种语法。基本图形使用各种函数名称(绘图、历史、条形图、其他??),并且都有自己的怪癖和期望。另一方面,ggplot2 将始终以 ggplot()qplot() 开头,并且输入数据(或多或少)每次都将始终采用相同的格式。 ggplot 处理图例和缩放的方式也非常方便。最后,ggplot 网站非常方便,但我建议您阅读本书以深入了解。 肥皂盒>
猜你喜欢
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-31
  • 1970-01-01
  • 2021-05-16
相关资源
最近更新 更多