數(shù)據(jù)
數(shù)據(jù)來(lái)源
使用的數(shù)據(jù)集mtcars是R自帶的數(shù)據(jù)
數(shù)據(jù)格式說(shuō)明

該數(shù)據(jù)集的數(shù)據(jù)類(lèi)型為data.frame,一共有11列,每一列對(duì)應(yīng)于汽車(chē)的某一特征。每一行記錄一種汽車(chē)的詳細(xì)信息,本次繪圖一共截取了mtcars的前30行數(shù)據(jù)。
繪圖
上一期已經(jīng)講了
- 如何畫(huà)最基礎(chǔ)的散點(diǎn)圖描述兩個(gè)變量之間的關(guān)系
- 如何讓散點(diǎn)圖按照某一特征分類(lèi)別表示
這一期將利用mtcars數(shù)據(jù)集繪制散點(diǎn)圖,并且用label標(biāo)注圖中的點(diǎn)
-
為點(diǎn)帶上文本label(image1)
# library library(ggplot2) library(hrbrthemes) #可以去除灰色的背景色,讓坐標(biāo)軸的軸名在坐標(biāo)軸的盡頭 data=head(mtcars, 30) #摘取數(shù)據(jù)集中的前30行 ggplot(data, aes(x=wt, y=mpg)) + #輸入繪圖的數(shù)據(jù) geom_point(shape=23,color="yellow",fill="pink",size=3.0,stroke=1.5,alpha=1.0) + #畫(huà)點(diǎn) geom_text( #為點(diǎn)注上label label=data$mpg, nudge_x = 0.25, nudge_y = 0.25, check_overlap = T, size=3, )+ theme_ipsum() #去除灰色的背景色,讓坐標(biāo)軸的軸名在坐標(biāo)軸的盡頭
ggplot函數(shù)設(shè)定data為繪圖的數(shù)據(jù),且wt列為橫坐標(biāo),mpg列為縱坐標(biāo)。
geom_point函數(shù)用來(lái)畫(huà)點(diǎn),里面設(shè)置了若干參數(shù)用來(lái)定義點(diǎn)的外形,比如這里設(shè)置點(diǎn)的形狀是菱形,輪廓顏色是黃色,填充顏色是粉色,點(diǎn)的大小設(shè)置為3,輪廓寬度設(shè)置為1.5,透明度是1。
geom_text函數(shù)用來(lái)定義標(biāo)簽的外形,"label=data$mpg"表示以mpg作為y坐標(biāo),所以定義點(diǎn)的label是用mpg描述的,如果要用行名(汽車(chē)名字)作為label,可以設(shè)置“l(fā)abel=rownames(data)”,“ nudge_x = 0.25, nudge_y = 0.25,”表示label和點(diǎn)之間的相對(duì)距離,“check_overlap = T”表示不讓label重合,“size”定義label的大小。

-
為點(diǎn)帶上有框框的label(image2)
只要把geom_text改成geom_label即可
image2 -
在圖中任意某一處帶上label
# library library(ggplot2) library(hrbrthemes) #可以去除灰色的背景色,讓坐標(biāo)軸的軸名在坐標(biāo)軸的盡頭 # Keep 30 first rows in the mtcars natively available dataset data=head(mtcars, 30) # Add one annotation ggplot(data, aes(x=wt, y=mpg)) + #輸入繪圖的數(shù)據(jù) geom_point(shape=23,color="yellow",fill="pink",size=3.0,stroke=1.5,alpha=1.0) + # 畫(huà)點(diǎn) geom_label( #定義標(biāo)簽 label="Look at this!", x=4.1, y=20, label.padding = unit(0.55, "lines"), label.size = 0.35, color = "black", fill="#69b3a2" )+ theme_ipsum() #去除灰色的背景色,讓坐標(biāo)軸的軸名在坐標(biāo)軸的盡頭
由于是帶有框框的標(biāo)簽,因此還要定義框框和字體的大小,label.padding就是定義了框框的大小,label.size是框框的輪廓大小,color是框框的輪廓顏色,fill是框框的填充顏色。此外還需要提供label的位置(就是x坐標(biāo)和y坐標(biāo))

-
篩選符合條件的點(diǎn)標(biāo)注出來(lái)
library(ggplot2) library(dplyr) library(tibble) library(hrbrthemes) #可以去除灰色的背景色,讓坐標(biāo)軸的軸名在坐標(biāo)軸的盡頭 # Keep 30 first rows in the mtcars natively available dataset data=head(mtcars, 30) # Change data rownames as a real column called 'carName' data <- rownames_to_column(data,var="carName") #調(diào)整數(shù)據(jù)結(jié)構(gòu) # Plot ggplot(data, aes(x=wt, y=mpg)) + #繪圖數(shù)據(jù) geom_point(shape=23,color="yellow",fill="pink",size=3.0,stroke=1.5,alpha=1.0) + #畫(huà)點(diǎn) geom_label( #畫(huà)標(biāo)簽 data= filter(data,mpg>20 & wt>3), # 篩選符合條件的點(diǎn) aes(label=carName), #定義以carName列命名 nudge_x = 0.3, nudge_y = 0.1, #調(diào)整點(diǎn)與label的相對(duì)位置 label.padding = unit(0.2, "lines"), # 定義框框的大小 label.size = 1, #定義框框的邊緣寬度 size=3, #定義label的大小 fill="red", #定義框框的填充色 color="yellow", #定義框框的邊緣顏色是黃色 )+ theme_ipsum() #去除灰色的背景色,讓坐標(biāo)軸的軸名在坐標(biāo)軸的盡頭
為什么要把行名轉(zhuǎn)化成具體的一列并以“carName”作為列名,因?yàn)橄旅娴拇a要以汽車(chē)名字作為label,而在畫(huà)這種圖時(shí),如果要命名則需要用某一列命名,行名不是具體的某一列,因此要先轉(zhuǎn)化一下。轉(zhuǎn)換后的數(shù)據(jù)如下所示,可以看到,carName成為一列獨(dú)立的數(shù)據(jù)。如果不是以汽車(chē)名字作為label,則不需要轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu),直接aes(label=data$mpg)或者其它列名


