ggplot2繪制箱線圖

參考自https://www.cnblogs.com/ljhdo/p/4921588.html

作者悅光陰

箱線圖通過繪制觀測數(shù)據(jù)的五數(shù)總括栅表,即最小值笋鄙、下四分位數(shù)、中位數(shù)怪瓶、上四分位數(shù)以及最大值,描述了變量值的分布情況践美。箱線圖能夠顯示出離群點(outlier)洗贰,離群點也叫做異常值,通過箱線圖能夠很容易識別出數(shù)據(jù)中的異常值陨倡。

箱線圖的各個組成部分的名稱及其位置如下圖所示:


箱線圖可以直觀地看出數(shù)據(jù)集的以下重要性值:

中心位置:中位數(shù)所在的位置就是數(shù)據(jù)集的中心敛滋;

散布程度:箱線圖分為多個區(qū)間,區(qū)間較短時兴革,表示落在該區(qū)間的點較集中绎晃;

對稱性:如果中位數(shù)位于箱子的中間位置,那么數(shù)據(jù)分布較為對稱杂曲;如果極值離中位數(shù)的距離較大庶艾,那么表示數(shù)據(jù)分布傾斜。

一擎勘,繪制箱線圖

通常情況下咱揍,我們使用ggplot和geom_boxplot繪制箱線圖,本次使用R內(nèi)置數(shù)據(jù)ToothGrowth作為示例數(shù)據(jù):

library(ggplot2)

ToothGrowth$dose <- as.factor(ToothGrowth$dose)

ggplot(ToothGrowth, aes(x=dose, y=len)) + geom_boxplot()

最基本的箱線圖如下:


2棚饵,設置離群點(outlier)

geom_boxplot函數(shù)中有outlier開頭的多個參數(shù)煤裙,用于修改離群點的屬性:

outlier.colour:離群點的顏色

outlier.fill:離群點的填充色

outlier.shape:離群點的形狀

outlier.size:離群點的大小

outlier.alpha:離群點的透明度

ggplot(ToothGrowth, aes(x=dose, y=len)) +

? geom_boxplot(outlier.colour="blue", outlier.shape=25, outlier.size=10,outlier.alpha=1,outlier.fill="red")


3,設置箱線圖的顏色

通過aes(color=)函數(shù)可以為每個箱線圖設置一個顏色噪漾,而箱線圖的劃分是通過aes(color=)函數(shù)的color參數(shù)來劃分的硼砰,劃分箱線圖之后,scale_color_*()函數(shù)才會起作用欣硼,該函數(shù)用于為每個箱線圖設置前景色和填充色题翰,顏色是自定義的:

scale_fill_manual() #for box plot, bar plot, violin plot, etc

scale_color_manual() #for lines and points

以下代碼設置箱線圖的前景色:

ggplot(ToothGrowth, aes(x=dose, y=len,color=dose)) +

? geom_boxplot()+? scale_color_manual(values=c("#999999","#E69F00","#56B4E9"))


4,設置Legend 的位置

說明(Legend)是對箱線圖的解釋性描述分别,默認的位置是在畫布的右側中間位置遍愿,可以通過theme()函數(shù)修改Legend的位置,lengend.position的有效值是top耘斩、right沼填、left、bottom和none括授,默認值是right:

p <- ggplot(ToothGrowth, aes(x=dose, y=len,color=dose)) +

? geom_boxplot()+

? scale_color_manual(values=c("#999999", "#E69F00", "#56B4E9"))

p + theme(legend.position="top")

p + theme(legend.position="bottom")

p + theme(legend.position="none") # Remove legend


5坞笙,設置箱線圖的標題和坐標軸的名稱

通過labs設置箱線圖的標題和坐標的名稱岩饼,參數(shù)title用于設置標題,x和y用于設置x軸和y軸的標簽:

ggplot(ToothGrowth, aes(x=dose, y=len,color=dose)) +

? geom_boxplot()+? scale_color_manual(values=c("#999999","#E69F00","#56B4E9"))+? theme(legend.position="right")+? labs(title="Plot of length? per dose",x="Dose (mg)", y ="Length")


6薛夜,繪制箱線圖的散點

通過geom_point函數(shù)籍茧,向箱線圖中添加點,geom_jitter()函數(shù)是geom_point(position = "jitter")的包裝梯澜,binaxis="y"是指沿著y軸進行分箱:

# Box plot with dot plot

p + geom_dotplot(binaxis='y', stackdir='center', dotsize=1)

# Box plot with jittered points

# 0.2: degree of jitterin x direction

p + geom_jitter(shape=16, position=position_jitter(0.2))


7寞冯,旋轉箱線圖

函數(shù)coord_flip()用于翻轉笛卡爾坐標系,使水平變?yōu)榇怪蓖砘铮怪弊優(yōu)樗剿绷洌饕糜诎扬@示y條件x的geoms和統(tǒng)計信息轉換為x條件y。

p <- ggplot(ToothGrowth, aes(x=dose, y=len)) +

? geom_boxplot() +

? coord_flip()


二咆疗,異常值檢測

繪制散點圖漓帚,并標記異常值:

ggplot(ToothGrowth, aes(x=dose, y=len,color=dose)) +

? geom_boxplot(outlier.colour="red", outlier.shape=7,outlier.size=4)+

? scale_color_manual(values=c("#999999", "#E69F00", "#56B4E9"))+

? theme(legend.position="right")+

? labs(title="Plot of length? per dose",x="Dose (mg)", y = "Length")+

? geom_dotplot(binaxis='y', stackdir='center', stackratio=1.5, dotsize=1.2)


當箱線圖中的異常值過多時,繪制的圖中午磁,箱子被壓成一條線尝抖,無法觀察到數(shù)據(jù)的分布,這就需要移除異常值迅皇,只保留適量的離群點昧辽,常見的做法是改變ylim的范圍,代碼是:

# compute lower and upper whiskers

ylim1 = boxplot.stats(df$y)$stats[c(1,5)]

# scale y limits based on ylim1

ggplot() + gemo_box() + coord_cartesian(ylim = ylim1*1.05)

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末喧半,一起剝皮案震驚了整個濱河市奴迅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挺据,老刑警劉巖取具,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異扁耐,居然都是意外死亡暇检,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門婉称,熙熙樓的掌柜王于貴愁眉苦臉地迎上來块仆,“玉大人,你說我怎么就攤上這事王暗』诰荩” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵俗壹,是天一觀的道長科汗。 經(jīng)常有香客問我,道長绷雏,這世上最難降的妖魔是什么头滔? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任怖亭,我火速辦了婚禮,結果婚禮上坤检,老公的妹妹穿的比我還像新娘兴猩。我一直安慰自己,他們只是感情好早歇,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布倾芝。 她就那樣靜靜地躺著,像睡著了一般缺前。 火紅的嫁衣襯著肌膚如雪蛀醉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天衅码,我揣著相機與錄音,去河邊找鬼脊岳。 笑死逝段,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的割捅。 我是一名探鬼主播奶躯,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼亿驾!你這毒婦竟也來了嘹黔?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤莫瞬,失蹤者是張志新(化名)和其女友劉穎儡蔓,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疼邀,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡喂江,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了旁振。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片获询。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拐袜,靈堂內(nèi)的尸體忽然破棺而出吉嚣,到底是詐尸還是另有隱情,我是刑警寧澤蹬铺,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布尝哆,位于F島的核電站,受9級特大地震影響丛塌,放射性物質發(fā)生泄漏较解。R本人自食惡果不足惜畜疾,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望印衔。 院中可真熱鬧啡捶,春花似錦、人聲如沸奸焙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽与帆。三九已至了赌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間玄糟,已是汗流浹背勿她。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留阵翎,地道東北人逢并。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像郭卫,于是被迫代替她去往敵國和親砍聊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

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