R使用筆記: ggplot2做boxplot的幾個細節(jié)

本次筆記內(nèi)容:

  • fill =的位置: ggplot(aes(fill = )) & geom_boxplot(fill = ) & geom_boxplot(aes(fill = ))
  • jitter(回避) 和 dodge(抖動)
  • scale_fill_manual() 的設(shè)置
fill的位置

ggplot()主體兵怯,或者geom_XX()中設(shè)置fill/color這樣的屬性參數(shù),需要注意在ggplot(aes(color=..., fill = ...))中為對整體圖像的屬性設(shè)置,在geom_XXX會繼承所有在ggplot()主體中的設(shè)置。

boxplot可以在ggplot(aes(fill = ...))中設(shè)置箱子填充情況,也可以在geom_boxplot(aes(fill = ...))中設(shè)置眨攘。如下兩個代碼Output圖是一樣的。

# 注意所有的分類變量要做成factor
ToothGrowth$dose = as.factor(ToothGrowth$dose)
ggplot(data = ToothGrowth, aes(x = dose, y = len, fill = supp)) +
  geom_boxplot() +
  scale_fill_manual(values = brewer.pal(3,"Set1")[c(1,2)])

ggplot(data = ToothGrowth,aes(x = dose, y = len)) +
  geom_boxplot(aes(fill = supp)) +
  scale_fill_manual(values = brewer.pal(3,"Set1")[c(1,2)])


geom_boxplot(fill = )的fill是用來指定具體使用什么顏色曲聂,也就是aes()外面的fill. 而aes(fill = )指定按照什么分組來區(qū)分顏色递惋。

下面兩個圖是一樣的output柔滔,fill不能重復(fù)指定。注意第二塊代碼萍虽,雖然在aes(fill=)里設(shè)置了按supp變量來設(shè)置顏色睛廊,但是因為geom_boxplot(fill = )設(shè)置,不能按supp變量區(qū)分顏色杉编。(...這是為啥超全??)

第三個會報錯邓馒。aes(fill = )和外面的fill不能同時使用嘶朱。

ggplot(data = ToothGrowth,aes(x = dose, y = len)) +
  geom_boxplot(fill = brewer.pal(3,"Set1")) 

ggplot(data = ToothGrowth,aes(x = dose, y = len, fill = supp)) +
  geom_boxplot(fill = brewer.pal(3,"Set1")) 

ggplot(data = ToothGrowth,aes(x = dose, y = len)) +
  geom_boxplot(aes(fill = supp), fill = brewer.pal(3,"Set1")[c(1,2)])
# Error: Aesthetics must be either length 1 or the same as the data (3): fill

dodge(抖動)和jitter(回避)

dodge是在geom_boxplot()(其它比方說geom_bar也可以)中設(shè)置的,用于調(diào)節(jié)box之間的水平距離光酣。注意如果不是如下所示這樣的分組疏遏,比方說每組只對應(yīng)一個box,那position的參數(shù)會被忽略救军。

# 一下使用position_dodge(), 在geom_boxplot中調(diào)節(jié)box的水平位置
ggplot(data = ToothGrowth,aes(x = dose, y = len)) +
  geom_boxplot(aes(fill = supp), position=position_dodge(1))

# 以下使用了position_jitter(), 只調(diào)節(jié)點的抖動程度
ggplot(data = ToothGrowth,aes(x = dose, y = len)) +
+     geom_boxplot(position=position_dodge(1)) +
+     geom_point(position = position_jitter(0.1))

# 以下使用position_jitterdodge(), 在已經(jīng)有dodge屬性的boxplot中使用财异,
ggplot(data = ToothGrowth,aes(x = dose, y = len, fill = supp)) +
  geom_boxplot() +
  geom_point(position = position_jitterdodge())

# 如果沒有dodge屬性,如下所示唱遭,去掉主體中的fill宝当,則報錯,提示需要至少一個dodge的依據(jù)
ggplot(data = ToothGrowth,aes(x = dose, y = len)) +
  geom_boxplot()  + 
  geom_point(position = position_jitterdodge())
# Error: `position_jitterdodge()` requires at least one aesthetic to dodge by

# 還有一種geom_jitter()
ggplot(...) +
  geom_boxplot(..) +
  geom_jitter(width=0.1)  # 用width調(diào)節(jié)抖動的幅度

另外position_jitterdodge()的參數(shù)可以設(shè)置胆萧,如jitter.width, jitter.height, dodge.width

scale_fill_manual()的設(shè)置
ggplot(data = ToothGrowth,aes(x = dose, y = len, fill = supp)) +
  geom_boxplot() +
  scale_fill_manual(values = brewer.pal(3,"Set1")[c(1,2)])

# scale_fill_maual(可以自定義fill變量的名稱及其分類的名稱庆揩。除了在theme()里修改legend, 也可以在這里修改)
ggplot(data = ToothGrowth,aes(x = dose, y = len, fill = supp)) +
  geom_boxplot() +
  scale_fill_manual(values = brewer.pal(3,"Set1")[c(1,2)], 
                    name = "my", 
                    labels = c("OJ" = "OJ_my", "VC" = "VC_1"))

總之:

  • 最好只在同一個地方使用fill = ,設(shè)置哪個變量需要使用不同顏色區(qū)分。在ggplot(aes(fill = ))主體部分使用似乎不錯跌穗,不容易弄混订晌。在geom_boxplot()里只用設(shè)置箱子的屬性就好,注意不要重復(fù)賦值蚌吸。
  • 畫比較復(fù)雜的圖時锈拨,要小心分面可能對圖各種屬性的影響。
  • 顏色最好也用scale_系列單獨設(shè)置
  • ...寫完自己都覺得很傻羹唠,ggplot2雖然細節(jié)都可以照顧到奕枢,但是太折騰了...恨不得用AI手工調(diào)整=_=這么麻煩的話去看看ggpubr和python作圖算了...

參考:
https://ggplot2.tidyverse.org/reference/position_dodge.html
https://ggplot2.tidyverse.org/reference/position_jitterdodge.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市佩微,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哺眯,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件一疯,死亡現(xiàn)場離奇詭異撼玄,居然都是意外死亡,警方通過查閱死者的電腦和手機墩邀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門掌猛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來眉睹,“玉大人,你說我怎么就攤上這事辣往⊥迷海” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵站削,是天一觀的道長坊萝。 經(jīng)常有香客問我许起,道長,這世上最難降的妖魔是什么园细? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任猛频,我火速辦了婚禮,結(jié)果婚禮上鹿寻,老公的妹妹穿的比我還像新娘。我一直安慰自己毡熏,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布狱窘。 她就那樣靜靜地躺著财搁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪妇拯。 梳的紋絲不亂的頭發(fā)上洗鸵,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天仗嗦,我揣著相機與錄音甘凭,去河邊找鬼。 笑死德撬,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蜓洪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼隆檀,長吁一口氣:“原來是場噩夢啊……” “哼粹湃!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起裳仆,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤孤钦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后偏形,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡勾徽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年统扳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吹由。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡朱嘴,死狀恐怖粗合,靈堂內(nèi)的尸體忽然破棺而出乌昔,到底是詐尸還是另有隱情,我是刑警寧澤磕道,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站伶丐,受9級特大地震影響疯特,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜漓雅,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望庶灿。 院中可真熱鬧吃衅,春花似錦、人聲如沸徘层。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至讯私,卻和暖如春西傀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拥褂。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留莫秆,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓镊屎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親匪煌。 傳聞我的和親對象是個殘疾皇子责蝠,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

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