在R中的同一图中绘制两幅图
我想在同一个图中绘制y1和y2。
x <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x, 1, 1)
plot(x, y1, type = "l", col = "red")
plot(x, y2, type = "l", col = "green")
但是当我这样做的时候,他们不会一起被绘制在同一个地块里。
在Matlab中,可以hold on
,但有谁知道如何在R中做到这一点?
lines()
或points()
将添加到现有图形中,但不会创建新窗口。 所以你需要这样做
plot(x,y1,type="l",col="red")
lines(x,y2,col="green")
您也可以在同一个图形上使用par
和plot,但使用不同的坐标轴。 如下所示:
plot( x, y1, type="l", col="red" )
par(new=TRUE)
plot( x, y2, type="l", col="green" )
如果你详细阅读R
par
,你将能够生成真正有趣的图表。 另一本书是Paul Murrel的R Graphics。
在构建多层图时,应考虑ggplot
包。 这个想法是创建一个基本美学的图形对象,并逐步增强它。
ggplot
风格要求数据打包在data.frame
。
# Data generation
x <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x,1,1)
df <- data.frame(x,y1,y2)
基本方案:
require(ggplot2)
ggplot(df, aes(x)) + # basic graphical object
geom_line(aes(y=y1), colour="red") + # first layer
geom_line(aes(y=y2), colour="green") # second layer
这里使用+ operator
来为基本对象添加额外的图层。
使用ggplot
您可以访问每个绘图阶段的图形对象。 比方说,通常的分步设置可能如下所示:
g <- ggplot(df, aes(x))
g <- g + geom_line(aes(y=y1), colour="red")
g <- g + geom_line(aes(y=y2), colour="green")
g
g
产生的情节,你可以在每个阶段看到它(好吧,创建至少一个图层后)。 剧情的进一步魅力也是通过创造的物体进行的。 例如,我们可以为轴添加标签:
g <- g + ylab("Y") + xlab("X")
g
最终的g
看起来像:
更新(2013-11-08):
正如评论中指出的那样, ggplot
的哲学建议以长格式使用数据。 您可以参考此答案https://stackoverflow.com/a/19039094/1796914以查看相应的代码。