最近有人在公眾號后臺留言問到這個問題箩言,今天的推文介紹一下ggplot2做堆積柱形圖并添加誤差線的辦法
完整代碼
'''
堆積柱形圖添加誤差線
'''
getwd()
library(ggplot2)
library(dplyr)
library(see)
df<-read.csv("penguins.csv")
head(df)
df %>% na.omit() %>%
group_by(species,sex) %>%
summarise(mean_value=mean(bill_length_mm),
sd_value=sd(bill_length_mm)) -> df1
df1
df1 %>%
group_by(species) %>%
mutate(new_col=cumsum(mean_value)) -> df2
df2$sex<-factor(df2$sex,
levels = c("male","female"))
ggplot(data=df2,aes(x=species,
y=mean_value,
fill=sex))+
geom_bar(position = "stack",stat="identity")+
geom_errorbar(aes(ymin=new_col-sd_value,
ymax=new_col+sd_value),
width=0.1)+
scale_y_continuous(expand = c(0,0),
limits = c(0,100))+
scale_fill_material_d()+
theme_bw()+
labs(x=NULL,y="ABCD")
最終結果
image.png
首先是準備數據
這個是R語言里自帶的數據集彭沼,我將其寫出到一個文件里裙椭,部分數據如下
image.png
我們只用到其中的三列
- species 企鵝的種類
- sex 企鵝的性別
- bill_length_mm 企鵝嘴的長度
解釋代碼
用到的R語言包
- ggplot2 畫圖
- dplyr 整理數據
- see 用來配色
讀取數據,查看前六行
df<-read.csv("penguins.csv")
head(df)
按照種類和性別分組計算平均值和標準差
df %>% na.omit() %>%
group_by(species,sex) %>%
summarise(mean_value=mean(bill_length_mm),
sd_value=sd(bill_length_mm)) -> df1
df1
給數據集添加新的一列用來控制誤差線的位置
df1 %>%
group_by(species) %>%
mutate(new_col=cumsum(mean_value)) -> df2
給映射顏色的變量賦予水平 (這個地方我一時還想不到如何解釋,大家可以想一下為啥有這一步)
df2$sex<-factor(df2$sex,
levels = c("male","female"))
接下來就是畫圖代碼了
ggplot(data=df2,aes(x=species,
y=mean_value,
fill=sex))+
geom_bar(position = "stack",stat="identity")+
geom_errorbar(aes(ymin=new_col-sd_value,
ymax=new_col+sd_value),
width=0.1)+
scale_y_continuous(expand = c(0,0),
limits = c(0,100))+
scale_fill_material_d()+
theme_bw()+
labs(x=NULL,y="ABCD")
畫圖代碼在今天推文的第三條視頻中會有介紹踢步,這里就不用文字來解釋了
今天的推文完整示例數據和代碼可以在第二條推文的留言區(qū)獲榷簟(第二條推文是一個廣告)
歡迎大家關注我的公眾號
小明的數據分析筆記本
小明的數據分析筆記本 公眾號 主要分享:1、R語言和python做數據分析和數據可視化的簡單小例子媳谁;2涂滴、園藝植物相關轉錄組學友酱、基因組學、群體遺傳學文獻閱讀筆記氢妈;3粹污、生物信息學入門學習資料及自己的學習筆記!