1. 程式人生 > >R語言ggplot2包之畫折線圖

R語言ggplot2包之畫折線圖

引言

折線圖一般用於描述一維變數隨著某一連續變數變化的情況,連續變數通常為時間。換句話說,折線圖最適合描述時間序列資料的變化情況。當然隨著離散變數變化也是可以的,不過這個離散變數必須是有序的。

畫一條折線圖

一條基本的折線圖還是比較簡單的,只要在ggplot裡的aes傳入x,y資料且geom指定為line線即可。如果x是連續變數,直接傳入即可。如果x是離散變數,此時x需要因子化,並在aes裡設定group引數為1.

線可以是實線,也可以是點狀的,可以用個linetpye進行設定,引數可以選擇solid, dashed, dotted等。

library(gcookbook)
library(ggplot2)
#連續變數的情況 ggplot(BOD, aes(x=Time, y=demand)) + geom_line() #離散變數的情況 BOD1 <- BOD # 賦值資料 BOD1$Time <- factor(BOD1$Time)#變數因子化 ggplot(BOD1, aes(x=Time, y=demand, group=1)) + geom_line(linetype="dotted")

當然如果需要改變y軸的範圍,可以用在後面加入ylim(a, b))進行設定。
這裡寫圖片描述
這裡寫圖片描述

給折線圖增加點

有時候我們需要在折線圖上顯示對應x軸的點資料,從而可以更加清晰的辨別原始資料,這特別適合資料比較稀疏的情況,比如上述沒有6的資料情況。我們直接在程式碼後面加上geom_point()

就可以了。如果想改變點的大小和形狀,控制size和shape這兩個引數就可以了。

ggplot(BOD, aes(x=Time, y=demand)) + geom_line() + geom_point(size=4, shape=20)

這裡寫圖片描述

畫多條折線圖

有時候我們想對某一離散變數進行分組,畫出多個折線圖進行比較。

supp1=c("OJ","OJ","OJ","VC","VC","VC")
dose1=c(0.5,1.0,2.0,0.5,1.0,2.0)
length1=c(13.23,22.70,26.06,7.98,16.77,26.14)
tgg=data.frame(supp1
,dose1,length1)
ggplot(tgg, aes(x=factor(dose1), y=length1, colour=supp1,group=supp1)) + geom_line(size=2)#x為藥劑劑量,並非連續型變數

這裡寫圖片描述
有時候你還想在比較的兩條線給加上資料點,可以在aes裡面設定shape或者fill引數,兩種方法得出的圖大致相同,除了點形狀差異。前者,兩條線上的點形狀各異,後者點形狀相同。

#設定shape引數
ggplot(tgg, aes(x=dose1, y=length1, color=supp1,shape=supp1)) + geom_line() +geom_point(size=4)
#設定fill引數
ggplot(tgg, aes(x=dose1, y=length1, color=supp1,fill=supp1)) + geom_line() +geom_point(size=4)

這裡寫圖片描述
這裡寫圖片描述
細心的你會發現,兩條線上遊資料重疊了,如果想區分開,使用position_dodge函式是個好辦法。

ggplot(tgg, aes(x=dose1, y=length1, shape=supp1)) +
geom_line(position=position_dodge(0.2)) + # Dodge lines by 0.2
geom_point(position=position_dodge(0.2), size=4)#控制兩線各向左向右移0.2的聚類,線也移,點也移,永遠不分開。

這裡寫圖片描述
基本的畫法就這些,個人認為畫的質量可以與EXCEL相媲美。