ggplot箱線圖之如何添加最大值最小值線(whisker-ends)

ggplot作為R語言畫圖的瑞士軍刀,相比于基礎的R包,語法更加易于理解和掌握,不需要掌握很多的命令就能畫出整潔美觀的圖表。比方說用ggplot來畫箱線圖,首先我們可以這樣操作:

library(ggplot2)
library(RColorBrewer)
p <- ggplot(mpg, aes(class, hwy))
p + geom_boxplot(aes(colour=class),width=0.5)+
  theme(panel.background = element_blank(),axis.ticks=element_blank(),legend.position="none",axis.line = element_line(colour="black",arrow=arrow(length = unit(0.20, "npc"))))

得到下圖

ggplot的箱線圖

但是在基礎R包繪制的箱線圖和大部分的箱線圖中是這樣的
基礎R包的箱線圖

相比較于基礎R包的箱線圖,ggplot的箱線圖缺少了最大值和最小值的兩條須線(whisker-ends),于是我谷歌后找到了一個網頁,參照網頁中的操作,我在我的代碼中加入了stat_boxplot,變成

library(ggplot2)
library(RColorBrewer)
p <- ggplot(mpg, aes(class, hwy))
p + geom_boxplot(aes(colour=class),width=0.5)+
  stat_boxplot(geom = "errorbar",width=0.15,aes(color=class))+
  theme(panel.background = element_blank(),axis.ticks=element_blank(),legend.position="none",axis.line = element_line(colour="black",arrow=arrow(length = unit(0.20, "npc"))))

加上須線后的box圖

但是這樣有一個問題,加上去的須線會擋住我們的box,顯得圖很亂,后來比照了前面的網頁和我的代碼,發現他的stat_boxplotgeom_boxplot前面,后來我想,之所以我的圖會變成這樣是因為ggplot是以圖層的方式進行繪圖,即后一個圖層會覆蓋前一個圖層,因此我的代買里面先geom_boxplotstat_boxplot導致前面的box被后面的線覆蓋掉,如果不想出現這種情況,那就只需要將這兩個命令調整一下順序,修改代碼如下:

library(ggplot2)
library(RColorBrewer)
p <- ggplot(mpg, aes(class, hwy))
p + stat_boxplot(geom = "errorbar",width=0.15,aes(color=class))+
  geom_boxplot(aes(colour=class),width=0.5)+
  theme(panel.background = element_blank(),axis.ticks=element_blank(),legend.position="none",axis.line = element_line(colour="black",arrow=arrow(length = unit(0.20, "npc"))))
最終修改完的

最終總結:記住ggplot是基于圖層的繪圖系統。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。