Tidyverse自學筆記-ggplot2標度之坐標軸設置

數(shù)據(jù)準備
本示例數(shù)據(jù)是自編數(shù)據(jù),僅為練習所用蚌成,數(shù)據(jù)結(jié)構假設為前痘,兩個年份year(2020,2021)担忧,兩個氮水平nitrogen(N1芹缔,N2),兩個玉米品種variety(a瓶盛,b)測定了5個試驗指標(變量v1最欠,v2,v3惩猫,v4芝硬,v5),每個處理3次重復block(1轧房,2拌阴,3)。

library(tidyverse) # 調(diào)用tidyverse奶镶。
df <- read_csv(file = "df.csv") # 導入數(shù)據(jù)迟赃。文檔在工作目錄下,所以直接給文件名導入实辑。
df # 查看數(shù)據(jù)捺氢。
## # A tibble: 24 × 9
##     year nitrogen variety block    v1    v2    v3    v4    v5
##    <dbl> <chr>    <chr>   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1  2020 N1       a           1  1.26  2.14   0.4   5    3.25
##  2  2020 N1       a           2  1.2   2.9    0.1   5.3  1.27
##  3  2020 N1       a           3  1.3   3      0.3   5.6  2.24
##  4  2020 N1       b           1  1.08  1.72   1.8   2.8  1   
##  5  2020 N1       b           2  1.05  1.65   1.7   2.5  3.12
##  6  2020 N1       b           3  1.15  1.35   1.5   3.1  4.57
##  7  2020 N2       a           1  1.32  3.78   1.6   6    5.85
##  8  2020 N2       a           2  1.28  4.32   1.4   6.1  6.48
##  9  2020 N2       a           3  1.35  3.95   1.3   6.2  7.21
## 10  2020 N2       b           1  1.33  3.47   2.8   4.1  6.56
## # … with 14 more rows

7.2 標度(scale)

標度(scale)
標度是將數(shù)據(jù)空間(標度的定義域)映射到圖形屬性空間(標度的值域)的一個函數(shù)藻丢。
標度的作用是調(diào)整數(shù)據(jù)映射的圖形屬性。這些屬性包括顏色,位置枷餐,形狀注盈,大小,線條類型等斋否。
ggplot2為每一種圖形屬性提供了一個默認的標度梨水,當默認標度不滿足我們的作圖需求時,我們需要對默認標度進行修改茵臭。

標度變換
要想將圖形屬性映射為變量疫诽,需要在函數(shù)aes()中將圖形屬性名稱和變量名稱關聯(lián)起來。ggplot2會自動為每個變量值分配唯一的圖形屬性水平,這個過程即為標度變換奇徒。

通常ggplot2會自動根據(jù)輸入變量選擇最優(yōu)的坐標刻度方案雏亚,若要手動設置或調(diào)整,就需要用到標度函數(shù):scale_<MAPPING><KIND>()摩钙,標度函數(shù)構成是scale圖形屬性名稱_標度名稱罢低,如:scale_color_gradient表示對圖形顏色的漸變色進行定義。

標度分類

按照對圖形作用的部分差異胖笛,分為坐標軸標度网持,顏色標度,填充標度长踊,大小標度功舀,透明度標度,線條標度身弊,形狀標度日杈。

常用的標度函數(shù):

  • scale_x or y_continuous():用于修改連續(xù)變量坐標軸的刻度和標簽。
  • scale_x or y_discrete():修改離散變量坐標軸的標簽佑刷。
  • scale_x or y_date():設置日期刻度莉擒。
  • scale_x_log10(), scale_x_sqrt(), scale_x_reverse():坐標刻度取對數(shù),開方瘫絮,翻轉(zhuǎn)涨冀。
  • scale_x_gradient(), scale_x_gradient2(), scale_x_gradientn():漸變色設置,x可為 color, fill 等麦萤。

7.2.1 坐標軸設置

坐標原點歸位

你會發(fā)現(xiàn)鹿鳖,ggplot2繪制的初始圖形,坐標原點均不是從0開始壮莹,可通過以下方式調(diào)整翅帜。

library(tidyverse) # 調(diào)用tidyverse包。
df <- read_csv("df.csv") # 讀取df數(shù)據(jù)集命满。
p <- ggplot(df, aes(v1, v2)) + geom_point() # 繪制基礎圖形涝滴,定義為p。
p # 顯示圖形胶台。
image.png
p + coord_cartesian(xlim = c(0, NA), ylim = c(0, NA)) # 坐標原點歸位歼疮。
image.png
p + expand_limits(x = 0, y = 0) # 結(jié)果同上。 
image.png
p + xlim(c(0, 1.5)) + ylim(c(0, 4.5)) # 也可以通過設置坐標軸刻度范圍讓起始刻度從0開始诈唬。
image.png

設置坐標軸范圍

  • 通過coord_cartesian()設置xlim和ylim韩脏。
  • 通過xlim(c(軸范圍最小值,軸范圍最大值))和ylim(c(軸范圍最小值,軸范圍最大值))。
  • 通過scale_y_continuous(limits =c())設置铸磅。
p + coord_cartesian(xlim = c(0, 1.5), ylim = c(0, 4.5)) # 通過coord_cartesian函數(shù)中的xlim和ylim控制x軸和y軸的取值范圍赡矢。
image.png
p + xlim(c(0, 1.5)) + ylim(c(0, 4.5)) # xlim和ylim設置軸取值范圍杭朱。
image.png
p + scale_x_continuous(limits = c(0, 1.5)) + scale_y_continuous(limits = c(0, 4.5)) # scale_x or y_continuous(limits = )調(diào)整軸取值范圍。
image.png

坐標軸翻轉(zhuǎn)

coord_flip(xlim = NULL, ylim = NULL, expand = TRUE)
實現(xiàn)坐標軸翻轉(zhuǎn)吹散,即 x 軸與 y 軸互換痕檬。

ggplot(df, aes(nitrogen, v1)) + geom_col() # 基礎圖形。
image.png
ggplot(df, aes(nitrogen, v1)) + geom_col() + coord_flip() # 翻轉(zhuǎn)坐標軸送浊。 
image.png

scale_x_reverse或scale_y_reverse
實現(xiàn)的是x軸或y軸取值范圍最大最小值的翻轉(zhuǎn)梦谜。

p + scale_x_reverse() # 原來x軸最大值翻轉(zhuǎn)至坐標左下角原來最小值的地方。
image.png
p + scale_y_reverse() # 原來y軸最大值翻轉(zhuǎn)至坐標左下角原來最小值的地方袭景。
image.png

坐標軸比例縮放

coord_fixed(ratio = 1, xlim = NULL, ylim = NULL, expand = TRUE)
參數(shù)ratio用于指定縱橫比唁桩,也就是縱軸1單位顯示的長度,是橫軸1單位顯示的長度的幾倍耸棒。 默認值為1荒澡,表示x 軸和 y 軸之間的縮放比例為 1:1。 ratio值越小与殃,圖形越扁单山。

p # 基礎圖。
image.png
p + coord_fixed() # coord_fixed()函數(shù)調(diào)整縱橫比為1:1幅疼。
image.png
p + coord_fixed(ratio = 2) #  縱軸單位顯示長度是橫軸單位顯示長度的2倍米奸。
image.png
p + coord_fixed(ratio = 1/2) #  縱軸單位顯示長度是橫軸單位顯示長度的0.5倍。
image.png
p + coord_fixed(ratio = 1/10) #  縱軸單位顯示長度是橫軸單位顯示長度的0.1倍爽篷。
image.png
p + xlim(c(0, 5)) + ylim(c(0, 5)) + coord_fixed() # 這里將橫軸和縱軸的刻度范圍設置成了一樣悴晰,再調(diào)整坐標軸比例為1:1。
image.png

更改分類軸項目順序

scale_x_discrete()或scale_y_discrete():實現(xiàn)圖形分類變量順序變更逐工。

ggplot(df, aes(nitrogen, v1)) + geom_boxplot() # 基礎圖繪制铡溪。
image.png
ggplot(df, aes(nitrogen, v1)) + geom_boxplot() + scale_x_discrete(limits = c("N2", "N1")) # 調(diào)整了x分類變量順序。
image.png
df$nitrogen <- factor(df$nitrogen,levels = c("N1", "N2"), order = TRUE) # 先設置df數(shù)據(jù)集nitrogen為因子泪喊,因子水平為N1和N2棕硫,讓因子順序為N1和N2。
df$nitrogen # 查看因子袒啼。
ggplot(df, aes(nitrogen, v1)) + geom_boxplot() + scale_x_discrete(limits = rev(levels(df$nitrogen))) # 反轉(zhuǎn)因子順序哈扮。
image.png

坐標軸坐標轉(zhuǎn)換

scale_x or y_log10():對x軸或y軸做對數(shù)轉(zhuǎn)換。
scale_x or y_sqrt():對x軸或y軸數(shù)值取平方根瘤泪。

p + scale_x_log10() # 對x軸數(shù)值取對數(shù)灶泵。
image.png
p + scale_x_sqrt() # 對x軸數(shù)值取平方根。
image.png

參考資料

  1. R語言編程—基于 tidyverse对途,張敬信,人民郵電出版社(待出版)髓棋,2022.
  2. R語言教程实檀,李東風惶洲,https://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/index.html
  3. 《R數(shù)據(jù)科學》,人民郵電出版社膳犹,2018.
  4. ggplot2高效實用指南恬吕,http://www.reibang.com/p/2dc81b91131e
  5. ggplot2超詳細講解,http://www.reibang.com/p/07f7931a00db
  6. ggplot保姆級教程-科研繪圖細節(jié)調(diào)參须床,https://zhuanlan.zhihu.com/p/391832351
  7. 第 23 章 ggplot2之標度铐料,王敏杰,https://bookdown.org/wangminjie/R4DS/tidyverse-ggplot2-scales.html
  8. R|ggplot2(三)|coord系列函數(shù)坐標軸轉(zhuǎn)換豺旬,https://zhuanlan.zhihu.com/p/29553382
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钠惩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子族阅,更是在濱河造成了極大的恐慌篓跛,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坦刀,死亡現(xiàn)場離奇詭異愧沟,居然都是意外死亡,警方通過查閱死者的電腦和手機鲤遥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門沐寺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人盖奈,你說我怎么就攤上這事芽丹。” “怎么了卜朗?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵拔第,是天一觀的道長。 經(jīng)常有香客問我场钉,道長蚊俺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任逛万,我火速辦了婚禮泳猬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宇植。我一直安慰自己得封,他們只是感情好,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布指郁。 她就那樣靜靜地躺著忙上,像睡著了一般。 火紅的嫁衣襯著肌膚如雪闲坎。 梳的紋絲不亂的頭發(fā)上疫粥,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天茬斧,我揣著相機與錄音,去河邊找鬼梗逮。 笑死项秉,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的慷彤。 我是一名探鬼主播娄蔼,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼底哗!你這毒婦竟也來了岁诉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤艘虎,失蹤者是張志新(化名)和其女友劉穎唉侄,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體野建,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡属划,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了候生。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片同眯。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖唯鸭,靈堂內(nèi)的尸體忽然破棺而出须蜗,到底是詐尸還是另有隱情,我是刑警寧澤目溉,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布明肮,位于F島的核電站,受9級特大地震影響缭付,放射性物質(zhì)發(fā)生泄漏柿估。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一陷猫、第九天 我趴在偏房一處隱蔽的房頂上張望秫舌。 院中可真熱鬧,春花似錦绣檬、人聲如沸足陨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽墨缘。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間飒房,已是汗流浹背搁凸。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工媚值, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留狠毯,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓褥芒,卻偏偏與公主長得像嚼松,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子锰扶,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容

  • ggplot2圖層元素 1. 數(shù)據(jù)(data):將要可視化的數(shù)據(jù) 2. 映射(aes):數(shù)據(jù)中的變量值 一般是X\...
    王尚一閱讀 941評論 0 1
  • ggplot2繪圖理念 圖形系統(tǒng)的核心理念是把繪圖與數(shù)據(jù)分離坷牛,把數(shù)據(jù)相關的繪圖與數(shù)據(jù)無關的繪圖分離罕偎,按圖層作圖。g...
    毛線東東a閱讀 2,068評論 0 12
  • 1京闰、坐標軸設置 1.1 坐標軸轉(zhuǎn)換 使用coord_flip()函數(shù)來將坐標軸翻轉(zhuǎn) 當反轉(zhuǎn)坐標軸后各項排列順序發(fā)生...
    100gle閱讀 14,601評論 0 20
  • title: "《ggplot2: 數(shù)據(jù)分析與圖形藝術》學習筆記1"author: "wintryheart"da...
    冬之心閱讀 1,843評論 0 4
  • 數(shù)據(jù)準備 本示例數(shù)據(jù)是自編數(shù)據(jù)颜及,僅為練習所用,數(shù)據(jù)結(jié)構假設為蹂楣,兩個年份year(2020俏站,2021),兩個氮...
    zjh9280閱讀 216評論 0 1