前情回顧
簡介
Matplotlib是一個Python的繪圖庫,可以繪制出常用圖表,如散點圖、柱狀圖等,下面做簡要介紹。
一個簡單的demo
首先從一個demo看起,繪制三角函數并填充一定區(qū)域,每一步有注釋說明,整體用法與MATLAB接近。
# encoding=utf-8
import numpy
import matplotlib.pyplot as plot
def main():
# 生成數組作為橫坐標
x = numpy.linspace(-numpy.pi, numpy.pi, 256, endpoint=True)
cos = numpy.cos(x)
sin = numpy.sin(x)
plot.figure(1)
# 繪制cos函數
plot.plot(x, cos, color="blue", linewidth=1.0, linestyle='-', label='cos')
# 繪制sin函數
plot.plot(x, sin, 'r*', label='sin')
# 設置標題
plot.title('function')
#------繪制坐標------
ax = plot.gca()
# 設置坐標四周的樣式
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['left'].set_position(('data', 0))
ax.spines['bottom'].set_position(('data', 0))
# 設置坐標值顯示的位置
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
# 設置坐標顯示內容
plot.xticks([-numpy.pi, -numpy.pi/2, 0, numpy.pi/2, numpy.pi],
[r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
plot.yticks(numpy.linspace(-1, 1, 5, endpoint=True))
# 設置每個坐標的樣式
for label in ax.get_xticklabels() + ax.get_yticklabels():
label.set_fontsize(8)
label.set_bbox(dict(facecolor='white', edgecolor='None', alpha=0.5))
# 設置圖例所在位置
plot.legend(loc='upper left')
# 設置網格
plot.grid()
# 繪制填充區(qū)域
plot.fill_between(x, numpy.abs(x) < 0.5, cos, cos > 0.5, color='blue', alpha=0.2)
t = 1
# 繪制直線
plot.plot([t, t], [0, numpy.cos(t)], 'y', linewidth=3, linestyle='--')
# 繪制注解
plot.annotate('cos(1)', xy=(t, numpy.cos(1)), xycoords='data', xytext=(10, 30), textcoords='offset points',arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=0.2'))
plot.show()
if __name__ == '__main__':
main()
主要解釋一下fill_between()這個方法,這個方法完整定義為
fill_between(x, y1, y2=0, where=None, interpolate=False, hold=None, **kwargs)
- x-橫坐標
- y1-橫坐標為x時填充縱坐標的起點
- y2-橫坐標為x時填充縱坐標的終點
- where-縱坐標生效的填充范圍
畫出的圖如下

1.png
類型
matplotlib支持的繪圖類型主要有以下幾種
| 類型 | 說明 |
|---|---|
| scatter | 散點圖 |
| bar | 柱狀圖 |
| pie | 餅狀圖 |
| polar | 極坐標 |
| imshow | 熱力圖 |
下面是每種圖的示例。
散點圖

2.png
def scatter():
x = numpy.random.normal(0, 1, 100)
y = numpy.random.normal(0, 1, 100)
plot.scatter(x, y)
plot.show()
柱狀圖

3.png
def bar():
x = numpy.random.normal(0, 1, 100)
y = numpy.random.normal(0, 1, 100)
plot.bar(x, y, 0.2, edgecolor='white')
plot.show()
餅圖

4.png
def pie():
x = numpy.random.normal(0, 1, 5)
y = numpy.random.normal(0, 1, 5)
plot.pie(x)
plot.show()
極坐標

5.png
def polar():
theta = numpy.arange(0, 2 * numpy.pi, 2 * numpy.pi / 20)
r = 10 * numpy.random.rand(20)
plot.polar(theta, r)
plot.show()
熱力圖

def heatmap():
data = numpy.random.rand(3, 3)
cmap = cm.Blues
plot.imshow(data, interpolation='nearest', cmap=cmap, aspect='auto')
plot.show()
小結
matplotlib的繪圖功能十分強大和靈活,上面僅僅是很小的一部分,利用這個庫在數據分析說結果之后就可以直接繪制出想要的圖,不需要再用其它工具繪制,十分方便。