1 初識ggplot2
1.1 功能
-
一個作圖包
-
可以創建圖表,如散點圖、柱狀圖、線圖,將數據可視化
1.2 要素
- 數據(data)和映射(mapping)
- 幾何對象(Geometric)
- 標尺(scale)
- 統計變換(Statistics)
- 坐標系統(Coordinante)
- 圖層(layer)
- 分面(Facet)
- 主題(Theme)
1.3 理念
- ggplot2將數據,數據到圖形要素的映射,以及和數據無關的圖形要素繪制分離
- ggplot(data,aes(x,y))+(初始化圖形並指定數據源和作圖變量)
geom_type()+ (指定圖形的類型)
annotate()+ (添加文本注釋)
labs()+ (修改住坐標和坐標軸標題)
~~~
1.4 邏輯
- 按照圖層進行疊加,通過“+”進行疊加
1.5 一些作圖中用的函數
函數 | 添加 | 選項 |
---|---|---|
geom_bar() | 條形圖 | color、fill、alpha |
geom_boxplot() | 箱型圖 | color、fill、alpha、notch、width |
geom_density() | 密度圖 | color、fill、alpha、linetype |
geom_histogram() | 直方圖 | color、fill、alpha、linetype、binwidth |
geom_hline() | 水平線 | color、alpha、linetype、size |
geom_jitter() | 抖動點 | color、size、alpha、shape |
geom_line() | 線圖 | colorvalpha、linetype、size |
geom_point() | 散點圖 | color、alpha、shape、size |
geom_rug() | 地毯圖 | color、side |
geom_smooth() | 擬合曲線 | method、formula、color、fill、linetype、size |
geom_text() | 文字注解 | 很多 |
geom_violin() | 小提琴圖 | color、fill、alpha、linetype |
geom_vline() | 垂線 | color、alpha、linetype、size |
2 作圖
2.1 散點圖
library(ggplot2)
ggplot(mtcars,aes(mpg,wt))+geom_point
2.2 線性圖
ggplot(data,aes(mpg,x,y))+geom_line()
2.3 柱狀圖
- 查看頻率的分布情況
ggplot(data,aes(x))+geom_bar()
ggplot(mtcars,aes(cyl))+geom_bar()
ggplot(mtcars,aes(factor(cyl)))+geom_bar()
- 堆積柱形圖
ggplot(mtcars,aes(factor(cyl),fill=factor(am)))+geom_bar()
- 簇狀柱形圖
ggplot(mtcars,aes(factor(cyl),fill=factor(am)))+geom_bar(position="dodge")
2.4 直方圖
查看變量的分布情況
ggplot(data,aes(x))+geom_hisogram()
ggplot(mtcars,aes(mpg))+geom_histogram()
2.5 密度圖
- 查看變量頻率分布的情況
ggplot(data,aes(x))+geom_density()
~~~
# 根據vs進行分組
#color: 是對圖形的邊緣、點和線進行描繪
#fill 是進行填充
ggplot(mtcars,aes(mpg,color=factor(vs)))+geom_density()
ggplot(mtcars,aes(mpg,fill=factor(vs)))+geom_density()
2.6 箱型圖
-
查看變量的統計值分布
ggplot(data,aes(分類變量x,y))+geom_boxplot()
ggplot(mtcars,aes(factor(vs),mpg))+geom_boxplot()
3 分組組圖
3.1
ggplot(mtcars,aes(wt,mpg,color=qsec))+geom_point()
- 進行分組
ggplot(mtcars,aes(wt,mpg,color=factor(vs)))+geom_point()
3.2 aes參數
統一圖層的顏色,參數在aes外面
4 分面作圖
下面是兩個經常要用到的分面函數。
facet_wrap(facets, nrow = NULL, ncol = NULL, scales = "fixed", shrink = TRUE, as.table = TRUE, drop = TRUE)
facet_grid(facets, margins = FALSE, scales = "fixed", space = "fixed", shrink = TRUE, labeller = "label_value", as.table = TRUE, drop = TRUE)
其中facet_wrap和facet_grid不同在於facet_wrap是基於一個因子進行設置,facets表示形式為:變量(單元格) 而facet_grid是基於兩個因子進行設置,facets表示形式為:變量變量(行列),如果把一個因子用點表示,也可以達到facet_wrap的效果,也可以用加號設置成兩個以上變量
4.1 軸刻度一致
-
單變量作圖
ggplot(mtcars,aes(wt,mpg))+geom_point()+facet_grid(vs~.)
gplot(mtcars,aes(wt,mpg))+geom_point()+facet_grid(.~vs)
4.2 刻度不一致
不同縱軸刻度
不同橫軸刻度
ggplot(mtcars,aes(wt,mpg))+geom_point()+facet_grid(~vs,scales="free")

# 這里把scales 設置成free之后,可以看出每個分面都有自己的橫坐標刻度,可以單獨對x軸或y軸設置
- nrow,ncol 分面索要設置成的行和列,參數為數值,表示幾行或者幾列
- scales 參數fixed表示固定坐標軸刻度,free表示反饋坐標軸刻度,也可以單獨設置成free_x或free_y
- shrink 也和坐標軸刻度有關,如果為TRUE(默認值)則按統計后的數據調整刻度范圍,否則按統計前的數據設定坐標。
- drop 表示是否去掉沒有數據的分組,默認情況下不顯示,邏輯值為FALSE
- as.table 和小圖排列順序有關的選項。如果為TRUE(默認)則按表格方式排列,即最大值(指分組level值)排在表格最后即右下角,否則排在左上角。
- margins 通過TRUE或者FALSE表示否設置而一個總和的分面變量,默認情況為FALSE,即不設置
- space 表示分面空間是否可以按照數據進行縮放,參數和scales一樣
5 調整圖像的元素
5.1 形狀
- 形狀:geom_XXX(shape=x),x=1,2,3...,不同數值是不同的形狀
- 大小:size=x,x=1,2,3...,數值越大,尺寸越大
5.2 顏色
- color:是對圖形的邊緣、點和線進行描繪
- fill:填充圖形內部的顏色
- 指定填充一種顏色:直接在aes外部填寫,color="某種顏色"
5.3 文本注釋
annotate("text",x=,y=,label="")
text :表示添加類型為文本
x=,y=表示在指定位置上放上文本
label :表示填寫的文本內容
5.4 標題
labs(little="",x="",y="")
5.5 加線條
-
加豎線:geom_vline(xintercept=)
-
加橫線:geom_hline(yintercept=)
5.6 xy軸互換
coord_flip()
5.7 調整軸刻度的范圍
-
x軸:xlim(下限,上限)
-
y軸:ylim(下限,上限)
5.8 修改軸上的值
-
X:scale_x_continuous(breaks(),labels=c()
-
Y:scale_y_continuous(breaks(),labels=c()
舉例
ggplot(mtcars,aes(wt,mpg,color=factor(vs)))+
geom_point()+
annotate("text",x=4,y=20,label="yes")+
labs(title="hello",x="xxx",y="yyy")+
geom_vline(xintercept=3)+
geom_hline(yintercept=20)+
xlim(3,4)+ylim(15,25)

ggplot(mtcars,aes(wt,mpg,color=factor(vs)))+
geom_point()+
annotate("text",x=4,y=20,label="yes")+
labs(title="hello",x="xxx",y="yyy")+
geom_vline(xintercept=3)+
geom_hline(yintercept=20)+
xlim(3,4)+
ylim(15,25)+
scale_x_continuous(breaks = c(3.00,3.25,3.50,3.75,4.00),labels=c("a","b","c","d","e"))
