我想把y和y画在同一个图上。

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中是可以的,但有人知道在R中怎么做吗?


当前回答

我们也可以使用格库

library(lattice)
x <- seq(-2,2,0.05)
y1 <- pnorm(x)
y2 <- pnorm(x,1,1)
xyplot(y1 + y2 ~ x, ylab = "y1 and y2", type = "l", auto.key = list(points = FALSE,lines = TRUE))

对于特定的颜色

xyplot(y1 + y2 ~ x,ylab = "y1 and y2", type = "l", auto.key = list(points = F,lines = T), par.settings = list(superpose.line = list(col = c("red","green"))))

其他回答

tl;dr:你想使用曲线(加上add=TRUE)或直线。


我不同意par(new=TRUE),因为它会重复打印标记和轴标签。如

情节的输出(罪恶);(新= T)相当;绘图(函数(x) x**2)。

看看纵轴标签有多乱!由于范围是不同的,你需要设置ylim=c(两个函数之间的最低点,两个函数之间的最高点),这比我将要展示给你的要简单得多——如果你想添加的不仅仅是两条曲线,而是很多条曲线,那就更不容易了。


关于绘图,总是让我困惑的是曲线和直线之间的区别。(如果你不记得这是两个重要的绘图命令的名称,就唱出来吧。)

这就是曲线和直线的最大区别。

曲线将绘制一个函数,如曲线(sin)。Lines (x=0:10, y=sin(0:10))。

这里有一个微小的区别:对于你正在尝试做的事情,curve需要使用add=TRUE调用,而lines已经假设你正在向现有的图形添加。

这是调用plot(0:2)的结果;曲线(罪)。


幕后,检查方法(情节)。并检查身体(情节。函数)[[5]]。当你调用plot(sin)时,R计算出sin是一个函数(不是y值)并使用plot。函数方法,最终调用曲线。曲线是处理函数的工具。

Lines()或points()将添加到现有的图形中,但不会创建新的窗口。所以你需要这么做

plot(x,y1,type="l",col="red")
lines(x,y2,col="green")

在构建多层图时,应该考虑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

这里的+运算符用于向基本对象添加额外的层。

使用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的理念建议使用长格式的数据。 您可以参考这个答案以查看相应的代码。

我认为你想要的答案是:

plot(first thing to plot)
plot(second thing to plot,add=TRUE)

与其将要绘制的值保存在数组中,不如将它们存储在矩阵中。默认情况下,整个矩阵将被视为一个数据集。然而,如果你在图中添加相同数量的修饰符,例如col(),就像你在矩阵中有行一样,R会发现每一行都应该被独立对待。例如:

x = matrix( c(21,50,80,41), nrow=2 )
y = matrix( c(1,2,1,2), nrow=2 )
plot(x, y, col("red","blue")

这应该可以工作,除非您的数据集大小不同。