【ggplot2】為條形圖和折線圖添加誤差線

2021-02-19 上帝的bug

ggplot2隻能處理 data.frame數據,每列作為一個變量,是一個指標.

以ToothGrowth數據為例,進行處理


data("ToothGrowth")
tg <- ToothGrowth
head(tg)

## len supp dose

## 1 4.2 VC 0.5
## 2 11.5 VC 0.5
## 3 7.3 VC 0.5
## 4 5.8 VC 0.5
## 5 6.4 VC 0.5
## 6 10.0 VC 0.5



數據預處理

採用summarySE()(函數定義在本文末尾)對數據進行預處理,計算數據的 標準誤差(Standard Error). 

標準誤差區別於標準差(Standard Deviation) . SE為 standard error of the mean 

可以參考: http://blog.csdn.net/tanzuozhev/article/details/50830928


# summarySE 計算標準差和標準誤差以及95%的置信區間.

library(ggplot2)
tgc <- summarySE(tg, measurevar="len", groupvars=c("supp","dose"))

tgc

## supp dose N len sd se ci

## 1 OJ 0.5 10 13.23 4.459709 1.4102837 3.190283

## 2 OJ 1.0 10 22.70 3.910953 1.2367520 2.797727

## 3 OJ 2.0 10 26.06 2.655058 0.8396031 1.899314

## 4 VC 0.5 10 7.98 2.746634 0.8685620 1.964824

## 5 VC 1.0 10 16.77 2.515309 0.7954104 1.799343

## 6 VC 2.0 10 26.14 4.797731 1.5171757 3.432090


折線圖

繪製帶有誤差線和95%置信區間線的折線圖和點圖


# 帶有標準誤差線的折線圖

# Standard error of the mean

ggplot(tgc, aes(x=dose, y=len, colour=supp)) +
geom_errorbar(aes(ymin=len-se, ymax=len+se), width=.1) +
geom_line() +
geom_point()


# 對重疊的點,進行偏移處理(儘管這樣可以將點分開便於觀看,但是個人認為這並不科學)

pd <- position_dodge(0.1) # move them .05 to the left and right

ggplot(tgc, aes(x=dose, y=len, colour=supp)) +
geom_errorbar(aes(ymin=len-se, ymax=len+se), width=.1, position=pd) +
geom_line(position=pd) +
geom_point(position=pd)

## ymax not defined: adjusting position using y instead

## ymax not defined: adjusting position using y instead


# 繪製帶有95%置信區間的折線圖

ggplot(tgc, aes(x=dose, y=len, colour=supp)) +
geom_errorbar(aes(ymin=len-ci, ymax=len+ci), width=.1, position=pd) +
geom_line(position=pd) +
geom_point(position=pd)

## ymax not defined: adjusting position using y instead
## ymax not defined: adjusting position using y instead


# 設置誤差線的顏色,特別注意如果沒有 group=supp,這個重合的誤差線將不會偏移.

ggplot(tgc, aes(x=dose, y=len, colour=supp, group=supp)) +
geom_errorbar(aes(ymin=len-ci, ymax=len+ci), colour="black", width=.1, position=pd) +
geom_line(position=pd) +
geom_point(position=pd, size=3)

## ymax not defined: adjusting position using y instead
## ymax not defined: adjusting position using y instead

下面是一個完整的帶有標準誤差線的圖,geom_point 放在 geom_line之後,可以保證點被最後繪製,填充為白色.


ggplot(tgc, aes(x=dose, y=len, colour=supp, group=supp)) +
  geom_errorbar(aes(ymin=len-se, ymax=len+se), colour="black", width=.1, position=pd) +
  geom_line(position=pd) +
  geom_point(position=pd, size=3, shape=21, fill="white") + # 21 is filled circle
  xlab("Dose (mg)") +
  ylab("Tooth length") +
  scale_colour_hue(name="Supplement type", # Legend label, use darker colors
    breaks=c("OJ", "VC"),
    labels=c("Orange juice", "Ascorbic acid"),l=40) + # Use darker colors, lightness=40
  ggtitle("The Effect of Vitamin C on\nTooth Growth in Guinea Pigs") +
  expand_limits(y=0) + # Expand y range
  scale_y_continuous(breaks=0:20*4) + # Set tick every 4
  theme_bw() +
  theme(legend.justification=c(1,0),# 這一項很關鍵,如果沒有這個參數,圖例會偏移,讀者可以試一試
    legend.position=c(1,0)) # Position legend in bottom right

## ymax not defined: adjusting position using y instead
## ymax not defined: adjusting position using y instead


條形圖

繪製條形圖與繪製折線圖類似,但是必須要注意的是tgc$size必須被設置成 factor 類型,如果它是 數值型向量,那麼將會出現錯誤. > 這是因為dose如果是 數值型向量將會作為連續型數據進行處理,而 因子型 變量被作為離散型數據進行處理.

# 轉換為因子類型
tgc2 <- tgc
tgc2$dose <- factor(tgc2$dose)
# Error bars represent standard error of the mean
ggplot(tgc2, aes(x=dose, y=len, fill=supp)) +
  geom_bar(position=position_dodge(), stat="identity") +
  geom_errorbar(aes(ymin=len-se, ymax=len+se),
    width=.2, # 設置誤差線的寬度
    position=position_dodge(.9))


# 使用95%置信區間

ggplot(tgc2, aes(x=dose, y=len, fill=supp)) +
  geom_bar(position=position_dodge(), stat="identity") +
  geom_errorbar(aes(ymin=len-ci, ymax=len+ci),
    width=.2, # Width of the error bars
    position=position_dodge(.9))


完整的條形圖


ggplot(tgc2, aes(x=dose, y=len, fill=supp)) +
  geom_bar(position=position_dodge(), stat="identity",
      colour="black", # Use black outlines,
      size=.3) + # Thinner lines
  geom_errorbar(aes(ymin=len-se, ymax=len+se),
    size=.3, # Thinner lines
    width=.2,
    position=position_dodge(.9)) +
  xlab("Dose (mg)") +
  ylab("Tooth length") +
  scale_fill_hue(name="Supplement type", # Legend label, use darker colors
    breaks=c("OJ", "VC"),
    labels=c("Orange juice", "Ascorbic acid")) +
  ggtitle("The Effect of Vitamin C on\nTooth Growth in Guinea Pigs") +
  scale_y_continuous(breaks=0:20*4) +
  theme_bw()



相關焦點

  • Excel圖表學習13:在柱狀圖或折線圖中添加水平或垂直線(使用誤差線)
    可以添加一個新系列,將其應用到次要坐標軸,並使次要坐標軸不可見;也可以使用直線誤差線而不是兩點之間的連線。 在《Excel圖表學習12:在柱狀圖或折線圖中添加水平或垂直線(使用新系列)》一文中,詳細介紹了如何使用新系列添加水平或垂直線。
  • 跟著Nature Genetics學畫圖:R語言ggplot2畫折線圖並添加誤差線
    折線圖添加誤差線是非常常用的一種可視化方法,今天的推文介紹一下使用R語言的ggplot2作圖的代碼。
  • 如何給Excel中的柱形圖和折線圖添加警戒線或控制線?
    在Excel圖表製作中,添加警戒線或者控制線可以更直觀地看出數據是否存在異常或者有沒有超過固定值。比如下圖中的柱形圖——平均值線。不僅可以根據柱形顏色看出哪些月份超過平均值,還可以根據警戒線判斷超過平均值的月份。再比如下圖中的的折線圖——警戒線。
  • Excel圖表實戰技巧:為圖表添加誤差線
    誤差線是指用圖形的方式表示每個數據點的變化範圍,誤差線只能添加到二維的面積圖、條形圖、柱形圖、折線圖、XY散點圖和氣泡圖。Excel圖表提供了4種常用的誤差線,添加和設置誤差線的方法步驟如下。步驟一:單擊選取圖表,然後在」圖表工具「」布局「選項卡中,單擊「誤差線「」標準誤差誤差線「命令,為柱形圖添加標準誤差誤差線,如圖所示。標準誤差誤差線的中心與數據系列的數值相同,正負偏差為對稱的數值,並且所有的數據點的誤差量數據均相同。如果數據系列的各個數據點數值波動越大,則標準誤差越大。如果數據系列的各個數據點值相同,則標準誤差為0。
  • R語言ggplot2做簇狀柱形圖並添加誤差線的一個完整示例
    image.png現在的需要是做如下的圖image.png接下來就介紹如何利用原始數據到最終的圖的ggplot2的代碼首先是將3個子表格的數據整理到一張表格裡 比如這裡我新建了一個子表格sheet4,數據最終的格式如下
  • R語言的ggplot2做平滑的折線圖簡單小例子
    之前的圖文  跟著Nature Genetics學畫圖~ggplot2畫折線圖並在指定區域添加灰色背景 畫折線圖的遇到的一個問題是:ggplot2默認的折線圖畫出來基本都是帶尖的,有沒有辦法將折線圖變得平滑一點呢?
  • Python繪圖筆記:繪製四色散點圖和誤差條形圖
    x,y坐標,顏色按照for循環中的四色進行變換 #設置透明度和點的邊緣色為無 ax.scatter(x, y, c=color, s=scale, label=color, alpha=0.3, edgecolors='none')#設置圖例和網格線
  • 數據可視化系列:手把手教你繪製帶誤差線的條形圖
    條形圖可以用於展示數據不同分類下的均值、中位數、標準差和置信區間等,Excel可以實現
  • python學習筆記:同時畫多圖,折線圖,箱線圖,條形圖,柱狀圖等
    (figure)figure()#使用subplot創建多個子圖,下面的subplot(2,3,1)表示創建一個包含2行3列圖表的圖紙,1表示第一張圖subplot(2,3,1)plot(x,y)#折線圖subplot(2,3,2)#縱向條形圖
  • R語言——ggplot2的繪圖邏輯
    如散點圖、條形圖等,ggplot2包提供了許多的圖形類型供用戶使用。描述幾何對象函數描述geom_abline 線,由斜率和截距指定geom_jitter     點,自動添加了擾動geom_area   面積圖geom_line 線geom_bar
  • 圖形的繪製——誤差條形圖(Excel)
    上期我們說明了誤差線是什麼,以及如何用spss繪製。本期我們來介紹如何使用EXCEL畫出誤差條形圖。註:本文選用office2016及以上版本。在EXCEL中,不使用函數的話,是無法計算出均值、標準差這些結果的,我們需要先在spss中計算出來各組均值,再複製到EXCEL中。
  • EXCEL作圖如何添加誤差線
    誤差線是作圖中很常見的一個元素,小編發現有些讀者對添加誤差線的具體操作不是很清楚,今天我們先講講EXCEL中怎麼添加誤差線。我們以折線圖為例,通過「插入—圖表—帶數據標記的折線圖」,即可得到上圖。接下來是比較關鍵的一步,大家肯定注意到在圖表的右上角有「加號」的圖標,選中該圖標,即出現很多可供選擇的圖表元素,今天我們的主題是誤差線,選中誤差線,在其右側提供有標準誤差、百分比、標準偏差和更多選項。
  • ggplot2繪圖之四:散點圖、折線圖,點線圖
    為避免消化不良,引起不適,特此建議:說明1:為了更全面地了解和學習ggplot2繪圖,建議沒有觀看前三期的同學可以先打卡前三期視頻
  • 一文講透,帶你學會用Python繪製帶誤差棒的柱狀圖和條形圖
    Python數據可視化,作為數據常用的必備技能,是目前大數據和數據分析的一個熱門,而matplotlib庫作為Python中最為常用和經典的二維繪圖庫,受到了很多人的青睞,最近已經和大家共同探討了多種類型的圖表的繪製,其中關於誤差棒圖,咱們已經在上次一起討論過了,今天咱們繼續深入研究誤差棒圖相關的知識
  • 誤差線之在組合圖表中突出極值
    前面我們分享了集中組合圖的製作方法,比起單圖看上去複雜了一些,但是難度並不大。今天我們來分享有一點難度的圖表製作。我們依然使用的是折線圖和面積圖的組合。袁牧在《隨園詩話》中有句詩說「文喜看山不喜平」,用在圖表製作也是一樣的。
  • Tableau可視化之多變條形圖
    例如,想了解北京一年12個月中各月份的銷售額對比情況,那麼僅需將月份和銷售額分別拖動到行和列坐標軸,在標記區選擇條形圖並加入顏色和標籤設置,即可實現一張基本的條形圖。在基本條形圖添加參考區間上圖是添加了參考區間,區間上下限分別是平均值的50%和100%。
  • matplotlib庫繪製折線圖、子圖及條形圖
    注意:由於系統編輯器的限制,除了標題以外,所有加粗的無序列表都為代碼行。前面幾節我們學習了python中numpy和pandas庫的一些常用操作,接下來幾個章節,我們學習一個非常重要的數據可視化庫matplotlib(seaborn庫也有有所涉及)。這裡我們需要知道,matplotlib庫主要繪製一些2D圖形和簡單的3D圖形。
  • R語言ggplot2折線圖(line plot)添加置信區間(CI)展示學術論文作者數量的變化趨勢
    ncol=6,                                       label.hjust=0.5)) +  scale_color_brewer(type="qual", palette=2, guide="none")+  facet_wrap(~journal,ncol=23)image.png根據上圖確實可以看出學術期刊的作者數量確實是有增加的趨勢的
  • Excel圖表製作:柱形圖和折線圖的組合圖案例
    它能夠直觀地展示數據,並幫助分析數據和對比數據。作為EXCEL中非常重要的功能,今天給大家介紹一個柱形圖和折線圖的組合圖案例。如下圖數據源,是某一時間段6個銷售員工的銷售數據。現在需要在柱形圖上顯示銷售數據的平均線,並讓大於平均值和小於平均值的數據顯示不同的顏色。並且當數據變動的時候,平均值和數據系列都會隨之變動。
  • 一文讀懂ggplot2數據可視化
    Wilkinson(2005)將一幅統計圖形看做由以下幾個主要部分:數據;表現數據的點、線、多邊形、柵格、顏色等;坐標系 ggplot2命令的基本組成具體來講,在ggplot2程序包中,每一副圖都是由若干組件組成的,這些組件包括:data: 數據,必須為data.frame。