3.1 柱狀圖
以 Python 代碼的形式講解柱狀圖的繪制原理,這里重點(diǎn)講解 bar()函數(shù)的使用方法。
代碼:
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
# some simple data
x = [1,2,3,4,5]
y = [6,10,4,5,1]
# create bar
plt.bar(x,y,align="center",color="r",tick_label=["A","B","C","D","E"],alpha=0.6)
# set x,y_axis label
plt.xlabel("測(cè)試難度")
plt.ylabel("試卷份數(shù)")
# set yaxis grid
plt.grid(True,axis="y",ls=":",color="r",alpha=0.3)
plt.show()
運(yùn)行結(jié)果:

為了展示圖表里的中文字體,我們選擇字體“SimHei”, 通 過(guò) “mpl.rcParams["font.sans-serif"]
=["SimHei"]”完成字體配置任務(wù)。不使用默認(rèn)的“Unicode minus”模式來(lái)處理坐標(biāo)軸軸線的刻度標(biāo)
簽是負(fù)數(shù)的情況,一般可以使用“ASCII hyphen”模式來(lái)處理坐標(biāo)軸軸線的負(fù)刻度值的情況,即 通
過(guò)“mpl.rcParams["axes.unicode_minus"]=False”語(yǔ)句實(shí)現(xiàn)模式的選擇。
語(yǔ)句中各參數(shù)的含義:
x:柱狀圖中的柱體標(biāo)簽值。
y:柱狀圖中的柱體高度。
align:柱體對(duì)齊方式。
color:柱體顏色。
tick_label:刻度標(biāo)簽值。
alpha:柱體的透明度。
3.2 條形圖
將柱狀圖中的柱體由垂直方 向變成水平方 向,柱狀圖就變成條形圖,函數(shù)也就變成barh(x,y,align="center",color="k",tick_label=["A","B","C","D","E"]),其中參數(shù) x 是 y 軸上柱體標(biāo)簽值,y 是柱體的寬度,在 x 軸上顯示,tick_label 表示 y 軸上的柱體標(biāo)簽值。
代碼:
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
# some simple data
x = [1,2,3,4,5]
y = [6,10,6,5,6]
# create horizontal bar
plt.barh(x,y,align="center",color="r",tick_label=["A","B","C","D","E"])
# set x,y_axis label
plt.ylabel("測(cè)試難度")
plt.xlabel("試卷份數(shù)")
# set xaxis grid
plt.grid(True,axis="x",ls=":",color="r",alpha=0.3)
plt.show()
運(yùn)行結(jié)果:

3.3 堆積圖
堆積圖顧名思義就是將若干統(tǒng)計(jì)圖形堆疊起來(lái)的統(tǒng)計(jì)圖形,自然是一種組合式圖形。下面,我們就結(jié)合前面講過(guò)的柱狀圖和條形圖的繪制方法,具體講解堆積柱狀圖和堆積條形圖的實(shí)現(xiàn)方法。
3.3.1堆積柱狀圖
如果將函數(shù) bar()中的參數(shù) bottom 的取值設(shè)定為列表 y,列表 y1=[2,6,3,8,5]代表另一套試卷的份
數(shù),函數(shù) bar(x,y1,bottom=y,color="r")就會(huì)輸出堆積柱狀圖。
代碼:
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
# some simple data
x = [1,2,3,4,5]
y = [6,10,4,5,1]
y1 = [2,6,3,8,5]
# create bar
plt.bar(x,y,align="center",color="#66c2a5",tick_label=["A","B","C","D","E"],label="班級(jí) A")
plt.bar(x,y1,align="center",bottom=y,color="#8da0cb",label="班級(jí) B")
# set x,y_axis label
plt.xlabel("測(cè)試難度")
plt.ylabel("試卷份數(shù)")
plt.legend()
plt.show()
運(yùn)行結(jié)果:

3.3.2堆積條形圖
將函數(shù) barh()中的參數(shù) left 的取值設(shè)定為列表 y,列表 y1=[2,6,3,8,5]代表另一套試卷的份數(shù),
函數(shù) barh(x,y1,left=y,color="r")就會(huì)輸出堆積條形圖。
代碼:
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
# some simple data
x = [1,2,3,4,5]
y = [6,10,4,5,1]
y1 = [2,6,3,8,5]
# create bar
plt.barh(x,y,align="center",color="#66c2a5",tick_label=["A","B","C","D","E"],label="班級(jí) A")
plt.barh(x,y1,align="center",left=y,color="#8da0cb",label="班級(jí) B")
# set x,y_axis label
plt.xlabel("測(cè)試難度")
plt.ylabel("試卷份數(shù)")
plt.legend()
plt.show()
運(yùn)行結(jié)果:

3.4 分塊圖
3.4.1多數(shù)據(jù)并列柱狀圖
對(duì)于堆積柱狀圖而言,我們也可以選擇多數(shù)據(jù)并列柱狀圖來(lái)改變堆積柱狀圖的可視化效果。當(dāng)
然,堆積條形圖也可以改變可視化效果,呈現(xiàn)多數(shù)據(jù)平行條形圖的圖形樣式。
代碼:
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
# some simple data
x = np.arange(5)
y = [6,10,4,5,1]
y1 = [2,6,3,8,5]
bar_width = 0.35
tick_label=["A","B","C","D","E"]
# create bar
plt.bar(x,y,bar_width,color="c",align="center",label="班級(jí) A",alpha=0.5)
plt.bar(x+bar_width,y1,bar_width,color="b",align="center",label=" 班級(jí)B",alpha=0.5)
# set x,y_axis label
plt.xlabel("測(cè)試難度")
plt.ylabel("試卷份數(shù)")
# set xaxis ticks and ticklabels
plt.xticks(x+bar_width/2,tick_label)
plt.legend()
plt.show()
運(yùn)行結(jié)果:

3.4.2多數(shù)據(jù)平行條形圖
對(duì)于堆積條形圖而言,我們也同樣可以選擇多數(shù)據(jù)平行條形圖來(lái)改變堆積條形圖的可視化效果。
多數(shù)據(jù)平行條形圖與多數(shù)據(jù)并列柱狀圖的實(shí)現(xiàn)方法是類似的,只是調(diào)用函數(shù)由 bar()變成 barh()。
代碼:
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
# some simple data
x = np.arange(5)
y = [6,10,4,5,1]
y1 = [2,6,3,8,5]
bar_width = 0.35
tick_label=["A","B","C","D","E"]
# create bar
plt.barh(x,y,bar_width,color="c",align="center",label="班級(jí) A",alpha=0.5)
plt.barh(x+bar_width,y1,bar_width,color="b",align="center",label=" 班級(jí)B",alpha=0.5)
# set x,y_axis label
plt.xlabel("測(cè)試難度")
plt.ylabel("試卷份數(shù)")
運(yùn)行結(jié)果:

3.5 參數(shù)探索
如果想在柱體上繪制裝飾線或裝飾圖,也就是說(shuō),設(shè)置柱體的填充樣式。我們可以使用關(guān) 鍵字參數(shù)hatch,關(guān)鍵字參數(shù) hatch 可以有很多取值,例如,“"/"”“"\\"”“"|"”“"-"”等,每種符號(hào)字符串
都是一種填充柱體的幾何樣式。而且,符號(hào)字符串的符號(hào)數(shù)量越多,柱體的幾何圖形的密集程度越高。
代碼:
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
# some simple data
x = [1,2,3,4,5]
y = [6,10,4,5,1]
# create bar
plt.bar(x,y,align="center",color="c",tick_label=["A","B","C","D","E"],hatch="|//")
# set x,y_axis label
plt.xlabel("測(cè)試難度")
plt.ylabel("試卷份數(shù)")
plt.show()
運(yùn)行結(jié)果:

3.6 堆積折線圖、間斷條形圖和階梯圖
3.6.1用函數(shù) stackplot()繪制堆積折線圖
堆積折線圖是通過(guò)繪制不同數(shù)據(jù)集的折線圖而生成的。堆積折線圖是按照垂直方向上彼此堆疊
且又不相互覆蓋的排列順序,繪制若干條折線圖而形成的組合圖形。
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(1,6,1)
y = [0,4,3,5,6]
y1 = [1,3,4,2,7]
y2 = [3,4,1,6,5]
labels = ["BluePlanet","BrownPlanet","GreenPlanet"]
colors = ["#8da0cb","#fc8d62","#66c2a5"]
plt.stackplot(x,y,y1,y2,labels=labels,colors=colors)
plt.legend(loc="upper left")
plt.show()
運(yùn)行如圖:

3.6.2用函數(shù) broken_barh ()繪制間斷條形圖
間斷條形圖是在條形圖的基礎(chǔ)上繪制而成的,主要用來(lái)可視化定性數(shù)據(jù)的相同指標(biāo)在時(shí)間維度
上的指標(biāo)值的變化情況,實(shí)現(xiàn)定性數(shù)據(jù)的相同指標(biāo)的變化情況的有效直觀比較。
代碼如下:
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams["font.sans-serif"]=["LiSu"]
mpl.rcParams["axes.unicode_minus"]=False
plt.broken_barh([(30,100),(180,50),(260,70)],(20,8),facecolors="#1f78b4")
plt.broken_barh([(60,90),(190,20),(230,30),(280,60)],(10,8),facecolors=(
"#7fc97f","#beaed4","#fdc086","#ffff99"))
plt.xlim(0,360)
plt.ylim(5,35)
plt.xlabel("演出時(shí)間")
plt.xticks(np.arange(0,361,60))
plt.yticks([15,25],["歌劇院 A","歌劇院 B"])
plt.grid(ls="-",lw=1,color="gray")
plt.title("不同地區(qū)的歌劇院的演出時(shí)間比較")
plt.show()
運(yùn)行如下:

列表“[(60,90),(190,20),(230,30),(280,60)]”的元組表示從起點(diǎn)是 x 軸的數(shù)值為 60 的位置起,沿x軸正方向移動(dòng) 90 個(gè)單位。其他元組的含義類似。參數(shù)“(10,8)”表示從起點(diǎn)是 y 軸的數(shù)值為 10 的位置起,沿 y 軸正方向移動(dòng) 8 個(gè)單位,這就是每個(gè)柱體的高度和垂直起始位置。關(guān)鍵字參數(shù) facecolors 表示每個(gè)柱體的填充顏色,這里使用 HEX 模式的顏色表示方法。
3.6.3用函數(shù) step()繪制階梯圖
階梯圖在可視化效果上正如圖形的名字那樣形象,就如同山間的臺(tái)階時(shí)而上升時(shí)而下降,從圖形本身而言,很像折線圖。也用采是反映數(shù)據(jù)的趨勢(shì)變化或是周期規(guī)律的。階梯圖經(jīng)常使用在時(shí)間序列數(shù)據(jù)的可視化任務(wù)中,凸顯時(shí)序數(shù)據(jù)的波動(dòng)周期和規(guī)律。
代碼實(shí)現(xiàn)
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1,10,10)
y = np.sin(x)
plt.step(x,y,color="#8dd3c7", where="pre",lw=2)
plt.xlim(0,11)
plt.xticks(np.arange(1,11,1))
plt.ylim(-1.2,1.2)
plt.show()
運(yùn)行結(jié)果如下:

3.7 直方圖
直方圖是用來(lái)展現(xiàn)連續(xù)型數(shù)據(jù)分布特征的統(tǒng)計(jì)圖形。利用直方圖我們可以直觀地分析出數(shù)據(jù)的
集中趨勢(shì)和波動(dòng)情況。
我們以 Python 代碼的形式講解直方圖的繪制原理,主要講解 hist()函數(shù)的使用方法。
代碼實(shí)現(xiàn)
import matplotlib as mpl
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
import matplotlib.pyplot as plt
import numpy as np
# set test scores
scoresT = np.random.randint(0,100,100)
x = scoresT
# plot histogram
bins = range(0,101,10)
plt.hist(x,bins=bins,
color="#377eb8",
histtype="bar",
rwidth=10)
# set x,y-axis label
plt.xlabel("測(cè)試成績(jī)")
plt.ylabel("學(xué)生人數(shù)")
plt.show()
運(yùn)行結(jié)果如下:

首先,我們先解釋一下函數(shù) hist(x,bins=bins,color= "b",histtype="bar",label="score",rwidth=10)的參數(shù)的含義。
x:連續(xù)型數(shù)據(jù)輸入值。
bins:用于確定柱體的個(gè)數(shù)或是柱體邊緣范圍。
color:柱體的顏色。
histtype:柱體類型。
label:圖例內(nèi)容。
rwidth:柱體寬度。
3.8 餅圖
餅圖是用來(lái)展示定性數(shù)據(jù)比例分布特征的統(tǒng)計(jì)圖形。通過(guò)繪制餅圖,我們可以清楚地觀察出數(shù)
據(jù)的占比情況。
我們以 Python 代碼的形式來(lái)講述餅圖的繪制原理,我們重點(diǎn)講解 pie()函數(shù)的使用細(xì)節(jié)。
代碼實(shí)現(xiàn):
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
labels = "A 難度水平","B 難度水平","C 難度水平","D 難度水平"
students = [0.35,0.15,0.20,0.30]
colors = ["#377eb8","#4daf4a","#984ea3","#ff7f00"]
explode = (0.1,0.1,0.1,0.1)
# exploded pie chart
plt.pie(students,explode=explode,
labels=labels,
autopct="%3.1f%%",
startangle=45,
shadow=True,
colors=colors)
plt.title("選擇不同難度測(cè)試試卷的學(xué)生百分比")
plt.show()
運(yùn)行結(jié)果如圖:

解釋一下函 數(shù) pie(students,explode=explode,labels=labels,autopct= "%3.1f%%",
startangle=45,shadow=True, colors=colors)的參數(shù)含義,如下所示。
students:餅片代表的百分比。
explode:餅片邊緣偏離半徑的百分比。
labels:標(biāo)記每份餅片的文本標(biāo)簽內(nèi)容。
autopct:餅片文本標(biāo)簽內(nèi)容對(duì)應(yīng)的數(shù)值百分比樣式。
startangle:從 x 軸作為起始位置,第一個(gè)餅片逆時(shí)針旋轉(zhuǎn)的角度。
shadow:是否繪制餅片的陰影。
colors:餅片的顏色。
上面講過(guò)分裂式餅圖的繪制方法,接下來(lái)就調(diào)整函數(shù) pie()的參數(shù),繪制其他類型的餅圖。
如果我們不繪制分裂式餅圖 ,那么只需要去掉參數(shù) explode 即可。
代碼:
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
labels = "A 難度水平","B 難度水平","C 難度水平","D 難度水平"
students = [0.35,0.15,0.20,0.30]
colors = ["#377eb8","#4daf4a","#984ea3","#ff7f00"]
# exploded pie chart
plt.pie(students,
labels=labels,
autopct="%3.1f%%",
startangle=45,
pctdistance=0.7,
labeldistance=1.2,
colors=colors)
plt.title("選擇不同難度測(cè)試試卷的學(xué)生百分比")
plt.show()
運(yùn)行結(jié)果:

餅圖不僅可以用來(lái)描述定性數(shù)據(jù)的比例分布,還可以將多個(gè)餅圖進(jìn)行嵌套,從而實(shí)現(xiàn)內(nèi)嵌環(huán)形
餅圖的可視化效果。
代碼:
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
elements = ["面粉","砂糖","奶油","草莓醬","堅(jiān)果"]
weight1 = [40,15,20,10,15]
weight2 = [30,25,15,20,10]
colormapList = ["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00"]
outer_colors = colormapList
inner_colors = colormapList
wedges1,texts1,autotexts1 = plt.pie(weight1,
autopct="%3.1f%%",
radius=1,
pctdistance=0.85,
colors=outer_colors,
textprops=dict(color="w"),
wedgeprops=dict(width=0.3,edgecolor="w"))
wedges2,texts2,autotexts2 = plt.pie(weight2,
autopct="%3.1f%%",
radius=0.7,
pctdistance=0.75,
colors=inner_colors,
textprops=dict(color="w"),
wedgeprops=dict(width=0.3,edgecolor="w"))
plt.legend(wedges1,
elements,
fontsize=12,
title="配料表",
loc="center left",
bbox_to_anchor=(0.91, 0, 0.3, 1))
plt.setp(autotexts1,size=15,weight="bold")
plt.setp(autotexts2,size=15,weight="bold")
plt.setp(texts1,size=12)
plt.title("不同果醬面包配料比例表的比較")
plt.show()
運(yùn)行結(jié)果:

3.9誤差棒圖
在很多科學(xué)實(shí)驗(yàn)中都存在測(cè)量誤差或是試驗(yàn)誤差,這是無(wú)法控制的客觀因素。這樣,在可視化試驗(yàn)結(jié)果的時(shí)候,最好可以給試驗(yàn)結(jié)果增加觀測(cè)結(jié)果的誤差以表示客觀存在的測(cè)量偏差。誤差棒圖就是可以運(yùn)用在這一場(chǎng)景中的很理想的統(tǒng)計(jì)圖形。通過(guò)抽樣獲得樣本,對(duì)總體參數(shù)進(jìn)行估計(jì)會(huì)由于樣本的隨機(jī)性導(dǎo)致參數(shù)估計(jì)值出現(xiàn)波動(dòng),因此需要用誤差置信區(qū)間來(lái)表示對(duì)總體參數(shù)估計(jì)的可靠范圍。誤差棒就可以很好地實(shí)現(xiàn)充當(dāng)總體參數(shù)估計(jì)的置信區(qū)間的角色。誤差棒的計(jì)算方法可以有很多種:?jiǎn)我粩?shù)值、置信區(qū)間、標(biāo)準(zhǔn)差和標(biāo)準(zhǔn)誤等。誤差 棒的可視化展示效果也有很多種樣式:水平誤差棒、垂直誤差棒、對(duì)稱誤差棒和非對(duì)稱誤差棒等。
我們以 Python 代碼的形式講解誤差棒的繪制原理,主要講解函數(shù) errorbar()的使用方法和參數(shù)使用細(xì)節(jié)。
代碼實(shí)現(xiàn)
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.1,0.6,10)
y = np.exp(x)
error = 0.05+0.15*x
lower_error = error
upper_error = 0.3*error
error_limit = [lower_error,upper_error]
plt.errorbar(x,y,yerr=error_limit,fmt=":o",
ecolor="y",elinewidth=4,
ms=5,mfc="c",mec='r',
capthick=1,capsize=2)
plt.xlim(0,0.7)
plt.show()
運(yùn)行結(jié)果如下:

我們采用單一數(shù)值的非對(duì)稱形式的誤差棒,函數(shù) errorbar()的參數(shù)含義如下所示。
x,y:數(shù)據(jù)點(diǎn)的位置。
yerr:?jiǎn)我粩?shù)值的非對(duì)稱形式誤差范圍。
fmt:數(shù)據(jù)點(diǎn)的標(biāo)記樣式和數(shù)據(jù)點(diǎn)標(biāo)記的連接線樣式。
ecolor:誤差棒的線條顏色。
elinewidth:誤差棒的線條粗細(xì)。
ms:數(shù)據(jù)點(diǎn)的大小。
mfc:數(shù)據(jù)點(diǎn)的標(biāo)記顏色。
mec:數(shù)據(jù)點(diǎn)的標(biāo)記邊緣顏色。
capthick:誤差棒邊界橫杠的厚度。
capsize:誤差棒邊界橫杠的大小。
函數(shù) errorbar()里的關(guān)鍵字參數(shù) yerr 使用了誤差范圍的非對(duì)稱形式,而且是數(shù)據(jù)點(diǎn)下方的誤差范圍大于數(shù)據(jù)點(diǎn)上方的誤差范圍。關(guān)鍵字參數(shù) xerr 也可以使用類似的誤差范圍,關(guān)鍵字參數(shù) fmt 如果取“none”值時(shí),數(shù)據(jù)點(diǎn)的連線、數(shù)據(jù)點(diǎn)的標(biāo)記樣式和顏色都不顯示。關(guān)鍵字參數(shù) capthick 也可以用關(guān)鍵字參數(shù) mew 代替。
本節(jié)我們講解了誤差棒圖的繪制方法,知道了誤差棒圖是用來(lái)展示定量數(shù)據(jù)誤差范圍的統(tǒng)計(jì)圖形。如果只是單一地使用誤差棒圖可能不會(huì)很好地發(fā)揮這種統(tǒng)計(jì)圖形的實(shí)際應(yīng)用價(jià)值。因此,需要我們將其他統(tǒng)計(jì)圖形與誤差棒圖相結(jié)合來(lái)展示數(shù)據(jù)集的測(cè)量誤差等內(nèi)容。
帶誤差棒的柱狀圖
我們前面已經(jīng)講過(guò)柱狀圖和誤差棒圖的繪制原理,現(xiàn)在我們可以將這兩種統(tǒng)計(jì)圖形結(jié)合起來(lái),繪制帶誤差棒的柱狀圖,使得統(tǒng)計(jì)圖形在反映數(shù)據(jù)測(cè)量誤差方面的應(yīng)用領(lǐng)域得到拓展。這種統(tǒng)計(jì)圖形在科學(xué)研究領(lǐng)域里應(yīng)用范圍很廣泛。
(1)代碼實(shí)現(xiàn)
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams["font.sans-serif"]=["LiSu"]
mpl.rcParams["axes.unicode_minus"]=False
# some simple data
x = np.arange(5)
y = [100,68,79,91,82]
std_err = [7,2,6,10,5]
error_attri = dict(elinewidth=2,ecolor="black",capsize=3)
# create bar with errorbar
plt.bar(x,y,
color="c",
width=0.6,
align="center",
yerr=std_err,
error_kw=error_attri,
tick_label=["園區(qū) 1","園區(qū) 2","園區(qū) 3","園區(qū) 4","園區(qū) 5"])
# set x,y_axis label
plt.xlabel("芒果種植區(qū)")
plt.ylabel("收割量")
# set title of axes
plt.title("不同芒果種植區(qū)的單次收割量")
# set yaxis grid
plt.grid(True,axis="y",ls=":",color="gray",alpha=0.2)
plt.show()
運(yùn)行結(jié)果如下:

帶誤差棒的條形圖
我們前面已經(jīng)講過(guò)條形圖和誤差棒圖的繪制原理,現(xiàn)在我們可以將這兩種統(tǒng)計(jì)圖形結(jié)合起來(lái),繪制帶誤差棒的條形圖。如果我們?cè)噲D反映定性數(shù)據(jù)的分布特征,同時(shí)還要反映分布的波動(dòng)特征,那么這種統(tǒng)計(jì)圖形就是合適之選。這種統(tǒng)計(jì)圖形在科學(xué)研究領(lǐng)域里的用途很多。
代碼實(shí)現(xiàn)
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams["font.sans-serif"]=["LiSu"]
mpl.rcParams["axes.unicode_minus"]=False
# some simple data
x = np.arange(5)
y = [1200,2400,1800,2200,1600]
std_err = [150,100,180,130,80]
bar_width = 0.6
colors = ["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00"]
# create horizontal bar
plt.barh(x,y,
bar_width,
color=colors,
align="center",
xerr=std_err,
tick_label=["家庭","小說(shuō)","心理","科技","兒童"])
# set x,y_axis label
plt.xlabel("訂購(gòu)數(shù)量")
plt.ylabel("圖書種類")
# set title
plt.title("大型圖書展銷會(huì)的不同圖書種類的采購(gòu)情況")
# set xaxis grid
plt.grid(True,axis="x",ls=":",color="gray",alpha=0.2)
plt.xlim(0,2600)
plt.show()
運(yùn)行結(jié)果如下:

帶誤差棒的條形圖的繪制是通過(guò)使用函數(shù) barh()中的關(guān)鍵字參數(shù) xerr 實(shí)現(xiàn)的。其他關(guān)鍵字參數(shù)的含義和用法都已經(jīng)在前面有關(guān)柱狀圖里繪制條形圖的部分詳細(xì)介紹過(guò)。條形圖的填充顏色是使用HEX 模式進(jìn)行命名的,文中的中文字體是使用隸書“LiSu”字體。
帶誤差棒的多數(shù)據(jù)并列柱狀圖
在上面講述了帶誤差棒的柱狀圖的繪制方法,其中的應(yīng)用場(chǎng)景是有關(guān)于“不同芒果種植區(qū)的單次收割量”的案例。如果我們嘗試進(jìn)一步比較不同年份的不同芒果種植區(qū)的單次收割量的情況,那么就可以借助帶誤差棒的多數(shù)據(jù)并列柱狀圖進(jìn)行可視化展示。
代碼實(shí)現(xiàn)
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams["font.sans-serif"]=["LiSu"]
mpl.rcParams["axes.unicode_minus"]=False
# some simple data
x = np.arange(5)
y1 = [100,68,79,91,82]
y2 = [120,75,70,78,85]
std_err1 = [7,2,6,10,5]
std_err2 = [5,1,4,8,9]
error_attri = dict(elinewidth=2,ecolor="black",capsize=3)
bar_width = 0.4
tick_label=["園區(qū) 1","園區(qū) 2","園區(qū) 3","園區(qū) 4","園區(qū) 5"]
# create bar with errorbar
plt.bar(x,y1,
bar_width,
color="#87CEEB",
align="center",
yerr=std_err1,
error_kw=error_attri,
label="2010")
plt.bar(x+bar_width,y2,
bar_width,
color="#CD5C5C",
align="center",
yerr=std_err2,
error_kw=error_attri,
label="2013")
# set x,y_axis label
plt.xlabel("芒果種植區(qū)")
plt.ylabel("收割量")
# set xaxis tick_label
plt.xticks(x+bar_width/2,tick_label)
# set title of axes
plt.title("不同年份的芒果種植區(qū)的單次收割量")
# set yaxis grid
plt.grid(True,axis="y",ls=":",color="gray",alpha=0.2)
plt.legend()
plt.show()
運(yùn)行結(jié)果如圖

帶誤差棒的堆積柱狀圖
如果我們嘗試比較不同地區(qū)的圖書展覽會(huì)的圖書采購(gòu)情況,那么我們既可以使用帶誤差棒的多數(shù)據(jù)并列柱狀圖,也可以使用帶誤差棒的堆積柱狀圖來(lái)呈現(xiàn)圖書展銷會(huì)上訂購(gòu)情況的變化和差異?,F(xiàn)在,我們介紹帶誤差棒的堆積柱狀圖的繪制方法。
代碼實(shí)現(xiàn)
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams["font.sans-serif"]=["LiSu"]
mpl.rcParams["axes.unicode_minus"]=False
# some simple data
x = np.arange(5)
y1 = [1200,2400,1800,2200,1600]
y2 = [1050,2100,1300,1600,1340]
std_err1 = [150,100,180,130,80]
std_err2 = [120,110,170,150,120]
bar_width = 0.6
tick_label=["家庭","小說(shuō)","心理","科技","兒童"]
error_attri = dict(ecolor="black",elinewidth=2,capsize=0)
# create bar
plt.bar(x,y1,
bar_width,
color="#6495ED",
align="center",
yerr=std_err1,
label="地區(qū) 1",
error_kw=error_attri)
plt.bar(x,y2,
bar_width,
bottom=y1,
color="#FFA500",
align="center",
yerr=std_err2,
label="地區(qū) 2",
error_kw=error_attri)
# set x,y_axis label
plt.xlabel("圖書種類")
plt.ylabel("訂購(gòu)數(shù)量")
# set title
plt.title("不同地區(qū)大型圖書展銷會(huì)的圖書采購(gòu)情況")
# set yaxis grid
plt.grid(True,axis="y",ls=":",color="gray",alpha=0.2)
plt.xticks(x,tick_label)
plt.legend()
plt.show()
運(yùn)行結(jié)果如圖

前面我們已經(jīng)講解過(guò)堆積柱狀圖的繪制原理了,現(xiàn)在只需要將誤差棒添加到堆積柱狀圖中就可以實(shí)現(xiàn)兩種統(tǒng)計(jì)圖形的融合,繪制出帶誤差棒的堆積柱狀圖。完成帶誤差棒的堆積柱狀圖的繪制任務(wù)的關(guān)鍵在于關(guān)鍵字參數(shù) yerr 的使用。因此,只需要向函數(shù) bar()傳遞關(guān)鍵字參數(shù) yerr 就可以在堆積柱狀圖的基礎(chǔ)上,實(shí)現(xiàn)帶誤差棒的堆積柱狀圖的繪制任務(wù)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-788463.html
參考資料:《Python 數(shù)據(jù)可視化之 matplotlib 實(shí)踐》第三章文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-788463.html
到了這里,關(guān)于Python數(shù)據(jù)可視化(三)繪制統(tǒng)計(jì)圖形大全的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!