Label
??為圖片添加:
??標(biāo)題紫皇,Title:標(biāo)題的目的是總結(jié)主要的發(fā)現(xiàn)草丧;
??副標(biāo)題,subtitle:在標(biāo)題下面以較小的字體添加額外的細節(jié)轰绵。
??圖片的說明文字粉寞,caption:在圖的右下角添加文本,通常用來描述數(shù)據(jù)的來源左腔。
??x唧垦,y,color:重新設(shè)置坐標(biāo)軸和圖例的標(biāo)題液样;橫縱坐標(biāo)的標(biāo)題中最好帶有單位振亮。
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(color = class)) +
geom_smooth(se = FALSE) +
labs(
title = "Fuel efficiency generally decreases with engine size",
subtitle = "Two seaters (sports cars) are an exception because of their light weight",
caption = "Data from fueleconomy.gov",
x = "Engine displacement (L)",
y = "Highway fuel economy (mpg)",
colour = "Car type"
)
注釋
不那么智能的工具geom_text()和geom_label()
??除了標(biāo)注圖片的主要部分,標(biāo)注單個或一組觀測值有時會很有用鞭莽。
??文本標(biāo)記對于標(biāo)記圖形很有用坊秸,它們本身可以用作散點圖(geom_text()和散點圖很相似,但有一個額外的美學(xué)屬性:label
)撮抓,也可以與其他幾何對象結(jié)合使用妇斤,例如,給points打標(biāo)簽或標(biāo)注bars的高度。geom_text()
只向圖形添加文本站超,geom_label()
在文本后面繪制一個矩形荸恕,使其更易于閱讀。
函數(shù)1 | 函數(shù)2 |
---|---|
僅向圖形中添加文本死相,check_overlap=TRUE可以不在同一位置繪制多個文本 | 在文本后繪制一個矩形融求,可以設(shè)置矩形的屬性。沒有check_overlap功能算撮,也就是會繪制所有標(biāo)簽生宛。沒有angle 美學(xué)屬性,且比geom_text()慢肮柜。fill 美學(xué)屬性可以填充label的背景顏色陷舅。 |
??1)parse:如果為TRUE,labels將被解析成表達式审洞,并如?plotmath
所描述的那樣展示莱睁。
??2)nudge_x,nudge_y:“nudge”芒澜,輕推仰剿。在水平和垂直方向上輕推標(biāo)簽的位置,位移text遠離point時很有用痴晦,特別在離散尺度上南吮,不能和position
一起指定。
??3)label.padding:labels周圍的填充量誊酌,默認0.25 lines部凑。
??4)label.r:圓角半徑,默認0.15 lines术辐。
??5)label.size:label邊框大小砚尽,默認0.25,單位為mm辉词。
??6)show.legend:圖例中是否應(yīng)該包含本layer的信息必孤?NA表示有美學(xué)映射時展示,沒有就不展示瑞躺;FALSE表示總是不展示敷搪;TRUE表示總是展示;也可以是一個named logical vector用來選擇性展示美學(xué)屬性幢哨。
??7)check_overlap:如果為TRUE赡勘,與同一個layer中之前的文本有重疊的text將不在圖片上畫了。check_overlap發(fā)生在繪制時間且按data中出現(xiàn)的順序捞镰,所以在調(diào)用geom_text()之前應(yīng)該將data按照標(biāo)簽列進行排序闸与。
??圖中毙替,a text element的 height 和 width 是0,你看到的是 physical unites 而不是 data units践樱。所以即使圖片的大小更改厂画,text labels 仍然是相同的大小,也因此你可能會看到一些圖中text labels跑到了整個繪圖區(qū)域之外拷邢,因為 axis limits 不會自動延伸以包含所有的 text label袱院。
??以上兩個函數(shù)為data中的每一行添加標(biāo)簽,如果需要給特定的點添加label瞭稼,可以用annotate()
忽洛。
??所以到現(xiàn)在你應(yīng)該明白肚邢,在給圖添加標(biāo)簽之前你需要準備label data凿将,這個label data可以是你繪圖數(shù)據(jù)中的一個子集。
# 準備label data:每種車型中最高效的車魄衅。
# row_number()等于rank(,ties.method="first")
best_in_class <- mpg %>%
group_by(class) %>%
filter(row_number(desc(hwy)) == 1)
# 用geom_text()為對應(yīng)的點添加labels廷臼,但labels之間苍在、labels和points之間互相重疊導(dǎo)致圖片可讀性差
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(colour = class)) +
geom_text(aes(label = model), data = best_in_class)
# 可用geom_label()將label用方框標(biāo)出來绝页,再用nudge將label拉離point一點點
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(colour = class)) +
geom_label(aes(label = model), data = best_in_class, nudge_y = 2, alpha = 0.5)
??美學(xué)屬性hjust
和vjust
用來控制label的對齊方式荠商,即point相對于label的位置,所有組合如下:
??
hjust
和vjust
的值可以是 ("left", "middle", "right", "bottom", "center", "top")续誉,也可以用0表示right/bottom莱没,1表示top/left。"inward" 總是將文本向中心對齊酷鸦, "outward"總是將文本向遠離中心的方向?qū)R(這里的中心可以理解為圖片的中心):
df <- data.frame(
x = c(1, 1, 2, 2, 1.5),
y = c(1, 2, 1, 2, 1.5),
text = c("bottom-left", "bottom-right", "top-left", "top-right", "center")
)
ggplot(df, aes(x, y)) +
geom_text(aes(label = text))
ggplot(df, aes(x, y)) +
geom_text(aes(label = text), vjust = "inward", hjust = "inward")
自動定位不重疊的text labels的工具ggrepel包
??以上兩個工具不能解決labels互相重疊的問題臼隔,ggrepel包
可以解決嘹裂,這個包里包括兩個函數(shù):geom_text_repel()
、geom_label_repel()
摔握,可以使labels互相遠離寄狼、labels遠離data points、labels遠離繪圖區(qū)域的邊緣氨淌。
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(colour = class)) +
geom_point(size = 3, shape = 1, data = best_in_class) +
ggrepel::geom_label_repel(aes(label = model), data = best_in_class)
??幾個小例子:
??1)用labels代替legend直接放在圖片里:首先確定labels的位置泊愧,可以是median(每種class),另外需關(guān)閉圖例:theme(legend.position = "none")盛正。
??2)將一個label放在圖片的角落:label data需要放在數(shù)據(jù)框里删咱。
??2)將一個label放在圖片的邊緣:將label的坐標(biāo)設(shè)置為Inf。
其他幫助注釋圖片的工具
??1)geom_hline()
和geom_vline()
為圖片添加參考線豪筝,推薦設(shè)置:厚度(size=2)
痰滋;顏色(color=white)
摘能;畫在原始數(shù)據(jù)層的下面,目的是不會喧賓奪主敲街。
??2)geom_rect()
在感興趣的點周圍畫方框徊哑,方框的邊界用xmin
、xmax
聪富、ymin
莺丑、ymax
。
??3)geom_segment()
墩蔓,設(shè)置arrow
參數(shù)畫一個箭頭指向一個點梢莽,用x
、y
奸披、xend
昏名、yend
定義箭頭的開始和結(jié)束位置。