我在R中读到了两个大数据集。为简单起见,请考虑以下内容:
##Data set 1
x = c("2005", "2006", "2007", "2008", "2009", "2010")
y = c(1,2,4,6,4,3)
##Data set 2
##Shorter than D2. Missing 2005
x1 = c( "2006", "2007", "2008", "2009", "2010")
y1 = c(20,40,60,50,29)
我想将两个数据集绘制为具有双y轴的线图。理想情况下,绘图是这样的:
plot(x, y, type = "o", col = "red")
par(new = TRUE)
plot(x, y1, type = "o", col = "blue",
xaxt = "n", yaxt = "n", xlab = "", ylab = "")
axis(4)
但当然x
任何y1
的大小都不一样,所以我收到错误。我试过了
plot(x1, y1, type = "o", col = "blue",
xaxt = "n", yaxt = "n", xlab = "", ylab = "")
但是y1
只是延伸到覆盖整个长度。
在这个简单的例子中,我可以添加一个空白行Y1
来覆盖缺失的2005年数据,但这不是我真实数据中的实际解决方案。无论如何,我可以告诉R相应地排列这两个数据集吗?
此外,我更喜欢使用gplots,因为我喜欢轻松抵消错误条的能力。代码可能看起来像这样
SE = c(.20,.40,.60,.50,.29)
SE1 = c(.20,.40,.60,.50,.29)
offset = .08
plotCI(x = x, y = y, uiw = SE, type = "o",col = "red")
par(new = TRUE)
plotCI(x = (x1) + offset, y = y1, type = "o", uiw = SE1, col = "blue",
xaxt = "n", yaxt = "n", xlab = "", ylab = "")
axis(4)
答案 0 :(得分:1)
好的,如果您的两个值范围之间存在数学关系,则可以这样做。一旦你知道那是什么,你就可以做这个情节。但请记住,在冰盖图中,您指的是这两个轴指的是完全相同的数据类型。事实上,使用这两个轴并不是非常有帮助......应该只有一个。他们混淆了3月和9月冰量之间的差异。你需要一个非常好的理由来做你正在计划的事情。
也许你有充分的理由(虽然我想不出来)。如果你不这样做,这是一个糟糕的主意。这就是你要做的......
plot(x, y*10, type = 'l', ylim = range(c(y*10,y1)), yaxt = 'n', col = 'red')
axis(2, (1:6)*10, 1:6, col = 'red')
lines(x1, y1, col = 'blue')
axis(4, (1:6)*10, col = 'blue')
grid(nx = NA, ny = NULL)
您可以设置col.axis来设置数字的颜色。
(你展示的冰盖示例可能与此相同...减去8而不是乘以10。)
答案 1 :(得分:1)
我仍然很高兴听到其他人的意见,但是其他人也有同感使用
的想法xlim=range(Data1$Year,Data2$Year)
在第二个绘图命令中,这似乎很好地修复了它。感谢大家的帮助!
答案 2 :(得分:0)
您可以使用points()
向现有地块添加点或线:
plot(x,y,type="o",col="red")
points(x1,y1,type="o",col="blue")
然后你只需要在第二轴上添加。