R語言ggplot2包之註釋方式

引言

光光展示數據對可視化來說,遠遠不夠。還有其他很多信息能夠幫助讀者解釋你的數據。除瞭標簽、坐標軸、圖例外,還能夠增加註釋,比如強調圖畫的某一區域,添加描述性文本等。

添加文本註釋

你可以在圖形中添加文本,增加可讀性。我們在annotate函數中設置text參數即可。

library(ggplot2)
library(gcookbook)
p <- ggplot(faithful, aes(x=eruptions, y=waiting)) + geom_point()
p + annotate("text", x=3, y=48, label="Group 1") +
annotate("text", x=4.5, y=66, label="Group 2")
#由於設置的文本會覆蓋原來的圖中對應的位置,可以改變文本的透明度或者顏色
p + annotate("text", x=3, y=48, label="Group 1", alpha=.1) +
 annotate("text", x=4.5, y=66, label="Group 2", family="serif",
fontface="italic", colour="darkred", size=3)

添加數學表達式註釋

我們也可以在圖形中註釋數學表達式。在annotate中增加parse=TRUE參數即可。

p <- ggplot(data.frame(x=c(-3,3)), aes(x=x)) + stat_function(fun = dnorm)
p + annotate("text", x=2, y=0.3, parse=TRUE,
label="frac(1, sqrt(2 * pi)) * e ^ {-x^2 / 2}")
#?plotmath可以見到更多使用數學表達式的例子。

添加線條

當進行線性回歸時,畫條擬合直線是個不錯的選擇。當然有時畫水平線和垂直線顯示刻度也是可以的。

p <- ggplot(heightweight, aes(x=ageYear, y=heightIn, colour=sex)) + geom_point()
#添加水平線和垂直線
p + geom_hline(yintercept=60) + geom_vline(xintercept=14)
#添加擬合回歸線
p + geom_abline(intercept=37.4, slope=1.75)
#我們也可以修改直線的類型
library(plyr)
hw_means <- ddply(heightweight, "sex", summarise, heightIn=mean(heightIn))
p + geom_hline(aes(yintercept=heightIn, colour=sex), data=hw_means,linetype="dashed", size=1)

添加分割標記

我們使用annotate(“segment”)畫分割線。

p <- ggplot(subset(climate, Source=="Berkeley"), aes(x=Year, y=Anomaly10y)) +geom_line()
p + annotate("segment", x=1950, xend=1980, y=-.25, yend=-.25)

添加長方形陰影

使用annotate(“rect”)函數添加長方形陰影圖層。

p <- ggplot(subset(climate, Source=="Berkeley"), aes(x=Year, y=Anomaly10y)) +geom_line()
p + annotate("rect", xmin=1950, xmax=1980, ymin=-1, ymax=1, alpha=.1,fill="blue")

添加誤差線

誤差線常用於統計學,以顯示數據潛在的誤差。使用geom_errorbar函數,並需要映射ymin和ymax變量。

ce <- subset(cabbage_exp, Cultivar == "c39")
ggplot(ce, aes(x=Date, y=Weight)) +
geom_line(aes(group=1)) +
geom_point(size=4) +
geom_errorbar(aes(ymin=Weight-se, ymax=Weight+se), width=.2)

給每個小平面增加註釋

我們根據數據類別畫瞭多個小平面,並想在每個小平面上標上註釋。我們可以構造一個數據框,並用geom_text()進行構造。

p <- ggplot(mpg, aes(x=displ, y=hwy)) + geom_point() + facet_grid(. ~ drv)
#構造註釋數據框
f_labels <- data.frame(drv = c("4", "f", "r"), label = c("4wd", "Front", "Rear"))
p + geom_text(x=6, y=40, aes(label=label), data=f_labels)

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。