当x和y长度不同时绘制双y轴

时间:2011-11-15 22:33:46

标签: r plot

我在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)

3 个答案:

答案 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")

然后你只需要在第二轴上添加。

相关问题