標簽
要想將探索性圖形轉(zhuǎn)換為解釋性圖形瞬欧,最容易的辦法就是加上一些標簽鼎天⊙湛可以使用labs()
函數(shù)來添加標簽,以下示例為圖形添加了一個標題:
ggplot(mpg,aes(displ,hwy))+geom_point(aes(color=class))+geom_smooth(se=FALSE)+labs(title = paste('Fuel efficiency generally decreases with','engine size'))
image.png
要想添加更多的文本仗扬,可以使用另外兩個實用的標簽
- subtitle可以在標題下以更小的字體添加更多的附加信息症概。
- caption可以在圖形右下角添加文本,常用于描述數(shù)據(jù)來源:
ggplot(mpg, aes(displ, hwy)) +geom_point(aes(color = class)) +geom_smooth(se = FALSE) +labs(title = paste("Fuel efficiency generally decreases with","engine size"), subtitle = paste("Two seaters (sports cars) are an exception","because of their light weight"), caption = "Data from fueleconomy.gov")
image.png
我們還可以使用
labs()
函數(shù)替換坐標軸和圖例中的標題
ggplot(mpg,aes(displ,hwy))+geom_point(aes(color=class))+geom_smooth(se=FALSE)+labs(x = "Engine displacement (L)", y = "Highway fuel economy (mpg)",colour = "Car type")
image.png
還可以使用數(shù)學公式代替字符串文本早芭,用
quote()
代替""彼城,再使用?plotmath
命令可查看可用選項:
ggplot(df,aes(x,y))+geom_point()+labs(x=quote(sum(x[i]^2,i==1,n)),y=quote(alpha+beta+frac(delta,theta)))
image.png
注釋
有時我們需要對特定的觀測添加標簽,此時可以使用geom_text()
函數(shù)退个。用dplyr篩選出mpg數(shù)據(jù)集每類汽車中效率最高的型號并作注釋:
library(dplyr)
data <- mpg %>% group_by(class) %>% filter(row_number(desc(hwy))==1)
ggplot(mpg,aes(displ,hwy))+geom_point(aes(color=class))+geom_text(aes(label=model),data=data)
image.png
為了解決標簽之間重疊的問題募壕,可以使用
geom_label()
函數(shù),它可以為文本加上文本框语盈,并且通過調(diào)節(jié)nudge_y參數(shù)舱馅,可以讓標簽位于數(shù)據(jù)點正上方:
ggplot(mpg,aes(displ,hwy))+geom_point(aes(color=class))+geom_label(aes(label=model),data=data,nudge_y = 2,alpha=0.5)
image.png
這樣的效果好一些,但如果仔細查看左上角刀荒,就會發(fā)現(xiàn)2個標簽幾乎完全重疊代嗤。此時可以借助ggrepel包來調(diào)整標簽的位置,避免重疊:
library(ggrepel)
ggplot(mpg,aes(displ,hwy))+geom_point(aes(color=class))+geom_point(data=data,size=3,shape=1)+geom_label_repel(aes(label=model),data=data)
image.png
有時可以直接將標簽放在圖形上填充不同的顏色缠借,以代替圖例:
class_avg <- mpg %>% group_by(class) %>% summarise(displ=median(displ),hwy=median(hwy))
ggplot(mpg,aes(displ,hwy,color=class))+geom_label_repel(aes(label=class),data=class_avg,size=6,label.size = 0,segment.colour = NA)+geom_point()+theme(legend.position = 'none')
image.png