2011-11-15 115 views
0

我有读入R.为了简单起见两个大的数据集,考虑以下几点:绘制双y轴上时x和y lenghts不同

##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

示例图形会很方便。你想通过图形的高度来缩放这些值吗?也许只是通过颜色来区分(匹配轴线)?或者,你是否希望规模成为所有价值的范围,低价位的价格范围非常低,而高价位的价位更远? – John

+0

感谢您的回复!我是一个新用户,所以我不能张贴我希望做的照片。但请查看http://all-geo.org/highlyallochthonous/2007/09/how-fast-is-the-arctic-melting/。他们有一个双y轴情节,类似于我希望创造的情节。除了我的情况,我的一条情节线的数据年数比另一条少。 – Vinterwoo

+0

我仍然很高兴听到其他人有什么要说的,但其他人分享了在第二个绘图命令中使用xlim = range(Data1 $ Year,Data2 $ Year)的想法,这似乎很好地解决了这个问题。感谢大家的帮助! – Vinterwoo

回答

1

我还是很乐意听到别人怎么说,但别人分享使用

xlim=range(Data1$Year,Data2$Year) 

在第二个plot命令,这似乎很好地解决它。感谢大家的帮助!

0

您可以使用points()来点或线添加到现有的情节:

plot(x,y,type="o",col="red") 
points(x1,y1,type="o",col="blue") 

然后你只需要在第二轴补充。

+0

您是否尝试过解决方案? (蓝点全部落在绘图区域之外)。 –

+0

非常感谢您的回答。 gplots有类似的东西吗?我喜欢使用plotCI,因为它很容易抵消我的错误栏,因此它们不会重叠。 – Vinterwoo

+0

'plotCI'有一个'add = TRUE'选项... –

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乘)

+0

感谢您的好评。冰盖链接只是为了展示我希望创造的情节类型的一个例子。我想要绘制这种数据的唯一原因是我认为我有两个因素(y和y1)之间的关系,但是他们的个别数量级是完全不同的。再次,谢谢! – Vinterwoo

+0

@VincentMoriarty,如果你觉得John回答你的问题,请检查左边的灰色勾号(正好低于答案分数)作为正确的答案。这将使问题“解决”。 –