1酣衷、坐標(biāo)軸設(shè)置
1.1 坐標(biāo)軸轉(zhuǎn)換
使用coord_flip()
函數(shù)來將坐標(biāo)軸翻轉(zhuǎn)
- 當(dāng)反轉(zhuǎn)坐標(biāo)軸后各項(xiàng)排列順序發(fā)生改變時(shí)来农,如果x是因子變量聂受,可以使用以下函數(shù)調(diào)整:
-
scale_x_discrete()
函數(shù) -
limits=rev(levels(...))
函數(shù)(為上一函數(shù)的選項(xiàng))
-
1.2 連續(xù)型坐標(biāo)軸值域
使用xlim()
和ylim()
函數(shù)即可限定坐標(biāo)軸的取值范圍
-
ylim()
限定范圍是scale_y_continuous()
的便捷寫法扮饶,一般表達(dá)時(shí)二者等價(jià)
ylim(0, 10)
scale_y_continuous(limits=c(0, 10))
但如果需要設(shè)定scale_y_continuous
的其他參數(shù)時(shí)逗鸣,同時(shí)使用二者會(huì)產(chǎn)生其他未知情況枝嘶;
因此帘饶,除了設(shè)定坐標(biāo)軸范圍需要外,如還需要調(diào)整其他屬性群扶,最好一律在scale_y_continuous()
內(nèi)進(jìn)行
- 當(dāng)通過修改坐標(biāo)軸標(biāo)度來修改值域時(shí)及刻,任何在范圍以外的數(shù)據(jù)都會(huì)被移除,最后會(huì)展示經(jīng)過修剪后的圖形
- 當(dāng)通過坐標(biāo)軸變換修改值域穷当,數(shù)據(jù)不會(huì)被修建提茁,只是將范圍放大或縮小馁菜;
scale_y_continuous(limits=c(5, 6.5))
coord_cartesian(ylim=c(5,6.5))
- 如果只想單向擴(kuò)展值域可以使用
expand_limits(y=#)
函數(shù)茴扁,但卻不能用于縮減值域
2、坐標(biāo)軸修改
2.1 反轉(zhuǎn)坐標(biāo)軸
對(duì)于連續(xù)坐標(biāo)軸汪疮,可以通過scale_*_reverse()
函數(shù)來反轉(zhuǎn)峭火;或者通過限定值域(先寫最大值,再寫最小值)來調(diào)整
- 但需要注意的是
scale_*_reverse()
函數(shù)與scale_*_continuous()
函數(shù)類似智嚷,不能與*lim()
函數(shù)搭配使用
2.2 修改項(xiàng)目順序
對(duì)于離散型坐標(biāo)軸卖丸,可以通過scale_*_discrete()
函數(shù)中的limits
參數(shù)來手動(dòng)修改,類似于factor()
函數(shù)中的level
參數(shù)
- 如果需要反轉(zhuǎn)項(xiàng)目盏道,則需要設(shè)定`limits=rev(level(factor))
2.3 坐標(biāo)軸比例縮放
使用coord_fixed()
可以對(duì)坐標(biāo)軸進(jìn)行縮放
- 如果希望兩坐標(biāo)軸之間為固定縮放比例稍浆,可以使用
ratio=#
參數(shù)
2.4 坐標(biāo)軸標(biāo)簽修改
修改坐標(biāo)軸標(biāo)簽的方法有以下幾種:
- 使用
xlab
和ylab
函數(shù)可以為坐標(biāo)軸添加文本標(biāo)簽 - 通過
labs
函數(shù)來設(shè)定 - 使用
scale
的其他函數(shù)中的name
參數(shù)來設(shè)定
2.5 移除坐標(biāo)軸
使用theme(axis.title.* = element_text()
來處理
2.6 修改坐標(biāo)軸標(biāo)簽外觀
和修改刻度標(biāo)簽外觀一樣,通過使用element_text()
函數(shù)及其參數(shù)來設(shè)定即可
2.5 添加坐標(biāo)軸直線
在ggplot2中坐標(biāo)軸的框線一般都繪成白色隱去猜嘱,如果需要繪制坐標(biāo)軸線衅枫,可以使用axis.line = element_line(colour='black')
來繪制
- 使用最初主題樣式通過函數(shù)
theme_bw()
來實(shí)現(xiàn)
2.6 對(duì)數(shù)坐標(biāo)軸
使坐標(biāo)軸呈對(duì)數(shù)顯示可以通過以下方法:
- 對(duì)坐標(biāo)軸變量取對(duì)數(shù)后再映射到坐標(biāo)軸上
- 使用
scale_*_log10()
函數(shù)
2.7 在坐標(biāo)軸上使用日期
如果需要繪制時(shí)間序列,只要將類型為Date的變量映射到坐標(biāo)軸即可
- ggplot2可以處理兩類時(shí)間相關(guān)的對(duì)象:
- 日期對(duì)象(Date):表示日期,分辨率為一天
- 日期時(shí)間對(duì)象(POSIXt):表示時(shí)刻朗伶,分辨率精確到秒的小小數(shù)部分
對(duì)于日期分割點(diǎn)可以通過以下方法來實(shí)現(xiàn):
- 通過創(chuàng)建一個(gè)新的二分變量來進(jìn)行映射
- 使用
seq()
函數(shù)來時(shí)間
datebreaks <- seq(as.Date("1992-06-01"), as.Date("1993-06-01"), by="2 month")
3弦撩、刻度線設(shè)置
3.1 設(shè)置刻度線位置
設(shè)置刻度線只需要使用標(biāo)度中的參數(shù)breaks=
即可
- 刻度線位置決定主網(wǎng)格線的位置:
- 如果坐標(biāo)軸為連續(xù)型變量,那么顏色更暗且沒有標(biāo)簽的次網(wǎng)絡(luò)格將被默認(rèn)繪制在兩個(gè)主網(wǎng)格線的正中間位置
- 如果坐標(biāo)軸為離散型變量论皆,則默認(rèn)會(huì)為每個(gè)項(xiàng)目生成一條刻度線
- 可以通過
limits
參數(shù)修改或移除項(xiàng)目 - 用
breaks
決定為哪些水平加上標(biāo)簽(相當(dāng)于factor()
函數(shù)中的label
參數(shù))
- 可以通過
3.2 移除刻度線和標(biāo)簽
移除刻度線標(biāo)簽需使用theme(axis.text.* = element_blank())
函數(shù)以及選項(xiàng)
- 這種方法無論是離散型還是連續(xù)型均有效
移除刻度線則使用theme(axis.ticks = element_blank())
函數(shù)及選項(xiàng)
- 但無法僅隱藏單個(gè)坐標(biāo)軸刻度
刻度標(biāo)簽益楼、刻度線和網(wǎng)格線的控制根據(jù)坐標(biāo)軸類型而有所不同:
- 連續(xù)型坐標(biāo)軸猾漫,使用
scale_*_continuous=(break)
參數(shù)來控制,當(dāng)breaks=NULL
時(shí)感凤,三個(gè)項(xiàng)目都不會(huì)被繪制 - 離散型坐標(biāo)軸悯周,使用
limits
參數(shù)控制
3.3 修改刻度標(biāo)簽文本
如果想要使得坐標(biāo)軸的刻度映射標(biāo)簽,使用像使用factor()
函數(shù)一樣使用scale_*_continuous()
函數(shù)來進(jìn)行操作:
hwp <- ggplot(heightweight, aes(x=ageYear, y=heightIn)) +
geom_point()
hwp
hwp + scale_y_continuous(breaks=c(50, 56, 60, 66, 72),
labels=c("Tiny", "Really\nshort", "Short",
"Medium", "Tallish"))
-
breaks
參數(shù)相當(dāng)于level
-
\n
表示換行符俊扭,使系統(tǒng)將'Really'和'short'以兩行的形式轉(zhuǎn)換
3.4 修改刻度標(biāo)簽的外觀
對(duì)于刻度標(biāo)簽樣式的修改队橙,可以通element_text()
函數(shù)來修改
element_text(angle=#, hjust=#, vjust=#,
family='', face='', colour='', size=#)
-
angle
表示角度 -
hjust
和vjust
分別表示橫向?qū)εc縱向?qū)ζ?/li> -
family
和face
表示字體族和樣式(粗體/斜體等)
4坠陈、繪制環(huán)狀圖
繪制思路:
- 先繪制直方圖
- 使用
coord_polar()
函數(shù)旋轉(zhuǎn) - 再通過
scale_x_continuous()
函數(shù)中的limits=c(0, 360))
參數(shù)來設(shè)定360度
ggplot(wind, aes(x=DirCat, fill=SpeedCat)) +
geom_histogram(binwidth=15, origin=-7.5) +
coord_polar() +
scale_x_continuous(limits=c(0,360))