2011-11-15 142 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回答你的問題,請檢查左邊的灰色勾號(正好低於答案分數)作爲正確的答案。這將使問題「解決」。 –