( 图表 ) 长条图
这篇教学会使用 matplotlib pyplot 模组里的 bar() 和 barh() 方法,将数据绘制成长条图 ( Bar Chart ),并进一步介绍 polt 的相关用法 ( bar() 绘制垂直长条图,barh() 绘制水平长条图 )。
本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
import matplotlib
要进行本篇的范例,必须先加载 matplotlib 函数库的 pyplot 模组,范例将其独立命名为 plt。
import matplotlib.pyplot as plt
pyplot.bar() 参数说明
pyplot.bar() 常用的参数如下表所示 ( 完整参数参考:matplotlib.pyplot.bar、matplotlib.pyplot.barh ):
| 参数 | 说明 |
|---|---|
| x | 必填,数据位置 ( x 轴 )。 |
| height | 必填,长条图高度 ( y 轴 )。 |
| width | 宽度,默认 0.8,支援数组数据。 |
| bottom | 底部位置,默认 0,支援数组数据。 |
| align | 对齐方式,默认 center,可设定 edge。 |
| color | 颜色,支援数组数据 ( 除了十六进制色码,也可填入颜色代码,例如 r、g、b、m、c、y...等,参考:color 列表 )。 |
| edgecolor | 边框颜色,支援数组数据 ( 除了十六进制色码,也可填入颜色代码,例如 r、g、b、m、c、y...等,参考:color 列表 )。 |
| linewidth | 边框宽度,默认 2,支援数组数据。 |
| tick_label | 座标轴文字,默认无文字,支援数组数据。 |
| xerr, yerr | x、y 轴的误差范围,默认 0,支援数组数据。 |
| ecolor | 误差线段颜色,默认黑色,支援数组数据。 |
| capsize | 误差范围的上下线条尺寸,默认 0。 |
| fill | 是否填满,默认 True。 |
绘制第一张长条图
下方的程序码,会画出一张垂直的的长条图。
import matplotlib.pyplot as plt
x = [1,2,3,4,5] # 水平資料點
h = [10,20,30,40,50] # 高度
plt.bar(x,h)
plt.show()
如果将上方的程序码,加入一些参数的设定,就能让长条图看起来更多变化。
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
h = [10,20,30,40,50]
color = ['r','b','g','y','m'] # 顏色數據
label = ['a','b','c','d','e'] # 標籤數據
plt.bar(x,h,color=color,tick_label=label,width=0.5) # 加入顏色、標籤和寬度參數
plt.show()
将 bar() 改为 barh(),就会变成水平的长条图 ( 注意如果改成水平长条图,参数 width 要改成 height )。
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
h = [10,20,30,40,50]
color = ['r','b','g','y','m']
label = ['a','b','c','d','e']
plt.barh(x,h,color=color,tick_label=label,height=0.5) # 改成 barh
plt.show()
两组数据的长条图
如果有两组数据需要同时呈现,可以调整长条图的对齐位置,并计算两组数据之间的位置,就能实现同时出现的长条图 ( 如果要显示更多组数据,则需透过绘制座标轴的方式处理 )。
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
x2 = [0.8,1.8,2.8,3.8,4.8] # 因為長條圖寬度 0.4,所以位移距離為除以 2 為 0.2
h = [10,20,30,40,50] # 第一組數據高度
h2 = [20,10,40,50,30] # 第二組數據高度
plt.bar(x,h,color='b',width=0.4, align='edge') # 第一組數據靠左邊緣對齊
plt.bar(x2,h2,color='r',width=0.4) # 第二組數據置中對齊
plt.show()
将 bar() 改为 barh(),就会变成水平的长条图 ( 注意如果改成水平长条图,参数 width 要改成 height )。
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
x2 = [0.8,1.8,2.8,3.8,4.8]
h = [10,20,30,40,50]
h2 = [20,10,40,50,30]
plt.barh(x,h,color='b',height=0.4, align='edge') # 改成 barh
plt.barh(x2,h2,color='r',height=0.4) # 改成 barh
plt.show()
搭配 NumPy 绘制长条图
由于 matplotlib 能完美的和 NumPy 整合,所以能透过 NumPy 强大的处理或产生数据能力,快速产生许多绘图用的数据,下方的例子,使用 NumPy 产生 100~1000 随机五个数字,使用 matplotlib 绘制出结果。
from numpy import random
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
h = random.randint(100,1000,5)
plt.bar(x,h)
plt.show()
微信扫码关注
抖音扫码关注