绘制多条曲线相同的图形和相同的比例

时间:2011-07-28 01:29:23

标签: r plot

这是this question的后续行动。

我想在同一个图表上绘制多条曲线,但我的新曲线与第一条曲线生成的y轴刻度相同。

请注意以下示例:

y1 <- c(100, 200, 300, 400, 500)
y2 <- c(1, 2, 3, 4, 5)
x <- c(1, 2, 3, 4, 5)

# first plot
plot(x, y1)

# second plot
par(new = TRUE)
plot(x, y2, axes = FALSE, xlab = "", ylab = "")

这实际上是在图表的相同坐标上绘制两组值(因为我隐藏了将使用第二个图创建的新y轴)。

我的问题是如何在绘制第二张图时保持相同的y轴刻度。

5 个答案:

答案 0 :(得分:34)

(典型的方法是使用plot一次设置限制,可能包括所有系列组合的范围,然后使用pointslines来添加单独的系列。)要与plot多次使用par(new=TRUE),您需要确保您的第一个地图有一个适当的ylim来接受所有系列(在另一种情况下,你可能还需要对xlim使用相同的策略:

# first plot
plot(x, y1, ylim=range(c(y1,y2)))

# second plot  EDIT: needs to have same ylim
par(new = TRUE)
plot(x, y2, ylim=range(c(y1,y2)), axes = FALSE, xlab = "", ylab = "")

enter image description here

下一个代码将更紧凑地执行任务,默认情况下,您将数字作为点,但第二个代码为您提供典型的R类型“点”:

  matplot(x, cbind(y1,y2))
  matplot(x, cbind(y1,y2), pch=1)

答案 1 :(得分:6)

如果

pointslines便利

  • y2稍后生成,或
  • 新数据不具有相同的x,但仍应进入相同的坐标系。

当您的y分享同一x时,您也可以使用matplot

matplot (x, cbind (y1, y2), pch = 19)

matplot (x, cbind (y1, y2), pch = 19)

(没有pch matplopt会绘制y矩阵的列号而不是点数。

答案 2 :(得分:5)

你不是很清楚你想要什么,因为我认为@DWin在技术上是正确的,给出了你的示例代码。我认为你真正想要的是:

y1 <- c(100, 200, 300, 400, 500)
y2 <- c(1, 2, 3, 4, 5)
x <- c(1, 2, 3, 4, 5)

# first plot
plot(x, y1,ylim = range(c(y1,y2)))

# Add points
points(x, y2)

DWin的解决方案是在隐含的假设(基于您的示例代码)下运行,您希望在原始比例上绘制第二组重叠。这就是为什么他的图像看起来像是在1,101等点上绘制的。再次调用plot不是你想要的,你希望使用{{添加到图中1}}。所以我机器上面的代码产生了这个:

enter image description here

但是DWin关于使用points的要点是正确的。

答案 3 :(得分:3)

我的解决方案是使用ggplot2。它会自动处理这些类型的事情。最重要的是妥善安排数据。

y1 <- c(100, 200, 300, 400, 500)
y2 <- c(1, 2, 3, 4, 5)
x <- c(1, 2, 3, 4, 5)
df <- data.frame(x=rep(x,2), y=c(y1, y2), class=c(rep("y1", 5), rep("y2", 5)))

然后使用ggplot2绘制

library(ggplot2)
ggplot(df, aes(x=x, y=y, color=class)) + geom_point()

这就是说df中的数据,并将点数分隔class

生成的图是enter image description here

答案 4 :(得分:1)

我不确定你想要什么,但我会使用格子。

x = rep(x,2)
y = c(y1,y2)
fac.data = as.factor(rep(1:2,each=5))
df = data.frame(x=x,y=y,z=fac.data)
# this create a data frame where I have a factor variable, z, that tells me which data I have (y1 or y2)

然后,只绘制

xyplot(y ~x|z, df)
# or maybe
xyplot(x ~y|z, df)