BTW,開始嘗試用Markdown。
下面的例子實現之前,需要在R中首先輸入一些數據。本例采用最簡單的散點數據,輸入如下代碼后,得到散點的x與y坐標值。
x <- c(0,1,2,3,5,7)
y <- c(-50,-80,-70,5,8,7)
基本繪圖
繪圖的基本命令為plot
。如果不帶任何參數使用plot
命令,輸入如下代碼:
plot(x,y)
得到的結果為下圖:
可以發現R會自動調整坐標軸。
如果你發現有不同,比如出來的圖形是包含邊框的。那也許是我或者你調整了原始參數,可以用如下命令來處理。
par(bty = "o")
此處的o為(環境)參數,可調整為1,7,c,u,]等。之后所加邊框就如參數的形狀。
給散點增加連線,可用如下命令:
lines(x,y)
得到的結果為下圖:
進一步,還可以用abline
命令,添加其他輔助線。
abline(h=-40)
得到的結果如下圖:
調整坐標軸
利用yaxt
參數,可實現plot
同時,不顯示坐標軸。
plot(x,y,yaxt="n",xaxt="n")
得到的結果如下圖:
如下命令可以得到更復雜的效果。
plot(x,y,yaxt="n",xlim=c(0,20),ylim=c(-20,20),mgp=c(3,1,0),pos=0,cex.axis=0.5)
得到的結果如下圖:
在這條plot命令中,xlim
和ylim
分別定義x軸與y軸的范圍;mgp
是控制坐標軸標題、刻度數值及軸線相對距離的參數;pos
參數控制橫軸在圖形中的相對位置(此例為垂直居中);cex.axis
控制圖形中刻度字體的大小。
有時我們需要對坐標軸做復雜處理,比如橫縱軸刻度不成比例,甚至同一軸的正負區域的刻度也不成比例。對于這種情況需要在隱藏坐標軸后,再自定義出需要的軸。
比如如下命令:
axis(2,at=seq(-20,0),labels=seq(-40,0,2),cex.axis=0.5,mgp=c(3,1,-1))
axis(2,at=seq(0,20),labels=seq(0,20,1),cex.axis=0.5,mgp=c(3,1,-1))
得到的結果如下圖:
可以看到x軸及y軸的正負象限的刻度都不同。這一點是通過axis
命令得到的。在這里,參數2
控制所繪制的坐標軸位置(可設置為1-4,分別位于不同方向)。at
和labels
參數分別設置新添加的軸上的點及其刻度。這里要注意的是,這里的點和刻度的值,也受到plot
的約束。比如在我們的例子中,plot
用ylim
設定了y軸負象限的范圍為-20
,那么如果設置的at
參數超過了20
的范圍,圖像會超出顯示范圍。那么這幾個值之間的關系是如何的?
這里有幾個值需要理清:
ylim
設定的-20
;
at
設定的-20
;
labels
設定的-40;
首先,ylim
設定了此次plot
的圖像中,y軸的刻度范圍。在此例中,y軸負象限只能有-20
值域范圍,否則會超過圖像范圍。
其次,at
設定了此次繪制的軸的取值范圍,這個范圍不該超過ylim
的范圍,否則也會超過圖像顯示范圍。
最后,注意到上述兩個參數只是設定了軸的范圍,并非為軸上的刻度顯示。這實際上給調整坐標軸留下了余地。觀察label
設定和最后的結果可以發現,實際的刻度值超過了ylim
和at
的范圍。也就是說,雖然實際坐標軸的值域并未發生變化,但卻可以通過調整刻度達到調整軸比例的效果。
接下來,cex.axis
參數調整的是所繪制的軸上字體的大小,由于刻度可能會變密,所以會用到。
小結
plot
、par
和axis
組合使用,能達到的繪圖效果比較豐富。將來會花時間完全整理,有需要也可以參考如下頁面獲得幫助。