我想把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中怎么做吗?
我想把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中怎么做吗?
当前回答
使用matplot函数:
matplot(x, cbind(y1,y2),type="l",col=c("red","green"),lty=c(1,1))
如果y和y在相同的x点上求值,就用这个。它缩放y轴以适应哪个更大(y1或y2),不像这里的一些其他答案,如果y2大于y1,就会剪辑y2 (ggplot解决方案大多数都可以接受这一点)。
或者,如果两条线没有相同的x坐标,在第一个图上设置轴限制,并添加:
x1 <- seq(-2, 2, 0.05)
x2 <- seq(-3, 3, 0.05)
y1 <- pnorm(x1)
y2 <- pnorm(x2,1,1)
plot(x1,y1,ylim=range(c(y1,y2)),xlim=range(c(x1,x2)), type="l",col="red")
lines(x2,y2,col="green")
我很惊讶这个Q已经4岁了,没有人提到matplot或x/ylim…
其他回答
如果你想把图分成两列(2个相邻的图),你可以这样做:
par(mfrow=c(1,2))
plot(x)
plot(y)
参考链接
Idiomatic Matlab plot(x1,y1,x2,y2)可以用ggplot2在R中翻译,例如:
x1 <- seq(1,10,.2)
df1 <- data.frame(x=x1,y=log(x1),type="Log")
x2 <- seq(1,10)
df2 <- data.frame(x=x2,y=cumsum(1/x2),type="Harmonic")
df <- rbind(df1,df2)
library(ggplot2)
ggplot(df)+geom_line(aes(x,y,colour=type))
灵感来自赵婷婷x轴范围不同的双线图使用ggplot2。
正如@redmode所描述的,您可以使用ggplot在同一个图形设备中绘制这两条线。在这个回答中,数据是“宽”格式的。但是,在使用ggplot时,以“长”格式将数据保存在数据帧中通常是最方便的。然后,通过在美学参数中使用不同的“分组变量”,线的属性,如线类型或颜色,将根据分组变量而变化,并将出现相应的图例。
在这种情况下,我们可以使用颜色美学,它将线条的颜色匹配到数据集中变量的不同级别(这里:y1 vs y2)。但首先,我们需要将数据从宽格式融化为长格式,例如使用函数'melt'从重塑2包。这里描述了重塑数据的其他方法:将data.frame从宽格式重塑为长格式。
library(ggplot2)
library(reshape2)
# original data in a 'wide' format
x <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x, 1, 1)
df <- data.frame(x, y1, y2)
# melt the data to a long format
df2 <- melt(data = df, id.vars = "x")
# plot, using the aesthetics argument 'colour'
ggplot(data = df2, aes(x = x, y = value, colour = variable)) + geom_line()
Lines()或points()将添加到现有的图形中,但不会创建新的窗口。所以你需要这么做
plot(x,y1,type="l",col="red")
lines(x,y2,col="green")
如果您使用的是基础图形(即不是晶格/网格图形),那么您可以通过使用点/线/多边形函数来模拟MATLAB的保持特性,从而在不开始新的图形的情况下为图形添加额外的细节。在多图布局的情况下,您可以使用par(mfg=…)来选择将内容添加到哪个图中。