上篇文章,我已經(jīng)講解繪制圖像大致步驟箍镜,接下來的系列文章將分別對各種圖形做講解源祈。其實(shí)就是了解各個(gè)圖種的繪圖 API。文章就講解第一種圖形色迂,柱狀圖香缺。
1 基礎(chǔ)
繪制柱狀圖,我們主要用到bar()
函數(shù)歇僧。只要將該函數(shù)理解透徹图张,我們就能繪制各種類型的柱狀圖。
我們先看下bar()
的構(gòu)造函數(shù):bar(x,height祸轮, width兽埃,*,align='center'倔撞,**kwargs)
x
包含所有柱子的下標(biāo)的列表height
包含所有柱子的高度值的列表width
每個(gè)柱子的寬度讲仰。可以指定一個(gè)固定值痪蝇,那么所有的柱子都是一樣的寬鄙陡⊥褐ⅲ或者設(shè)置一個(gè)列表祖秒,這樣可以分別對每個(gè)柱子設(shè)定不同的寬度征懈。align
柱子對齊方式屈呕,有兩個(gè)可選值:center
和edge
胸私。center
表示每根柱子是根據(jù)下標(biāo)來對齊,edge
則表示每根柱子全部以下標(biāo)為起點(diǎn)晨雳,然后顯示到下標(biāo)的右邊名党。如果不指定該參數(shù)遍尺,默認(rèn)值是center
帝际。
其他可選參數(shù)有:
color
每根柱子呈現(xiàn)的顏色蔓同。同樣可指定一個(gè)顏色值,讓所有柱子呈現(xiàn)同樣顏色蹲诀;或者指定帶有不同顏色的列表斑粱,讓不同柱子顯示不同顏色。edgecolor
每根柱子邊框的顏色脯爪。同樣可指定一個(gè)顏色值则北,讓所有柱子邊框呈現(xiàn)同樣顏色;或者指定帶有不同顏色的列表痕慢,讓不同柱子的邊框顯示不同顏色尚揣。linewidth
每根柱子的邊框?qū)挾取H绻麤]有設(shè)置該參數(shù)掖举,將使用默認(rèn)寬度快骗,默認(rèn)是沒有邊框。tick_label
每根柱子上顯示的標(biāo)簽塔次,默認(rèn)是沒有內(nèi)容滨巴。xerr
每根柱子頂部在橫軸方向的線段。如果指定一個(gè)固定值俺叭,所有柱子的線段將一直長恭取;如果指定一個(gè)帶有不同長度值的列表,那么柱子頂部的線段將呈現(xiàn)不同長度熄守。yerr
每根柱子頂端在縱軸方向的線段蜈垮。如果指定一個(gè)固定值耗跛,所有柱子的線段將一直長;如果指定一個(gè)帶有不同長度值的列表攒发,那么柱子頂部的線段將呈現(xiàn)不同長度调塌。ecolor
設(shè)置 xerr 和 yerr 的線段的顏色。同樣可以指定一個(gè)固定值或者一個(gè)列表惠猿。-
capsize
這個(gè)參數(shù)很有趣, 對xerr
或者yerr
的補(bǔ)充說明羔砾。一般為其設(shè)置一個(gè)整數(shù),例如 10偶妖。如果你已經(jīng)設(shè)置了
yerr 參數(shù)姜凄,那么設(shè)置 capsize 參數(shù),會(huì)在每跟柱子頂部線段上面的首尾部分增加兩條垂直原來線段的線段趾访。對 xerr 參數(shù)也是同樣道理态秧。可能看說明會(huì)覺得繞扼鞋,如果你看下圖就一目了然了申鱼。
error_kw
設(shè)置 xerr 和 yerr 參數(shù)顯示線段的參數(shù),它是個(gè)字典類型云头。如果你在該參數(shù)中又重新定義了 ecolor 和 capsize捐友,那么顯示效果以這個(gè)為準(zhǔn)。log
這個(gè)參數(shù)溃槐,我暫時(shí)搞不懂有什么用楚殿。orientation
設(shè)置柱子是顯示方式。設(shè)置值為 vertical 竿痰,那么顯示為柱形圖。如果設(shè)置為 horizontal 條形圖砌溺。不過 matplotlib 官網(wǎng)不建議直接使用這個(gè)來繪制條形圖影涉,使用barh
來繪制條形圖。
下面我就調(diào)用 bar 函數(shù)繪制一個(gè)最簡單的柱形圖规伐。
import matplotlib.pyplot as plt
import numpy as np
# 創(chuàng)建一個(gè)點(diǎn)數(shù)為 8 x 6 的窗口, 并設(shè)置分辨率為 80像素/每英寸
plt.figure(figsize=(8, 6), dpi=80)
# 再創(chuàng)建一個(gè)規(guī)格為 1 x 1 的子圖
plt.subplot(1, 1, 1)
# 柱子總數(shù)
N = 6
# 包含每個(gè)柱子對應(yīng)值的序列
values = (25, 32, 34, 20, 41, 50)
# 包含每個(gè)柱子下標(biāo)的序列
index = np.arange(N)
# 柱子的寬度
width = 0.35
# 繪制柱狀圖, 每根柱子的顏色為紫羅蘭色
p2 = plt.bar(index, values, width, label="rainfall", color="#87CEFA")
# 設(shè)置橫軸標(biāo)簽
plt.xlabel('Months')
# 設(shè)置縱軸標(biāo)簽
plt.ylabel('rainfall (mm)')
# 添加標(biāo)題
plt.title('Monthly average rainfall')
# 添加縱橫軸的刻度
plt.xticks(index, ('Jan', 'Fub', 'Mar', 'Apr', 'May', 'Jun'))
plt.yticks(np.arange(0, 81, 10))
# 添加圖例
plt.legend(loc="upper right")
plt.show()
運(yùn)行結(jié)果為:
2 進(jìn)階
bar 函數(shù)的參數(shù)很多蟹倾,你可以使用這些參數(shù)繪制你所需要柱形圖的樣式。如果你還不會(huì)靈活使用這樣參數(shù)猖闪,那就讓我們來學(xué)習(xí) matplotlib 官方提供的例子鲜棠。
# Credit: Josh Hemann
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
from collections import namedtuple
n_groups = 5
means_men = (20, 35, 30, 35, 27)
std_men = (2, 3, 4, 1, 2)
means_women = (25, 32, 34, 20, 25)
std_women = (3, 5, 2, 3, 3)
fig, ax = plt.subplots()
index = np.arange(n_groups)
bar_width = 0.35
opacity = 0.4
error_config = {'ecolor': '0.3'}
rects1 = ax.bar(index, means_men, bar_width,
alpha=opacity, color='b',
yerr=std_men, error_kw=error_config,
label='Men')
rects2 = ax.bar(index + bar_width, means_women, bar_width,
alpha=opacity, color='r',
yerr=std_women, error_kw=error_config,
label='Women')
ax.set_xlabel('Group')
ax.set_ylabel('Scores')
ax.set_title('Scores by group and gender')
ax.set_xticks(index + bar_width / 2)
ax.set_xticklabels(('A', 'B', 'C', 'D', 'E'))
ax.legend()
fig.tight_layout()
plt.show()
運(yùn)行結(jié)果如下:
開動(dòng)你的大腦,想想還能繪制出什么樣式的柱形圖培慌。
上篇閱讀:徹底理解Iterable豁陆、Iterator、generator
推薦閱讀:Python 繪圖吵护,我只用 Matplotlib(二)