什麼是matplotlib?
Matplotlib 是 Python 中最受歡迎的資料可視化軟體包之一,支援跨平台運作,它是 Python 常用的 2D 繪圖庫,同時它也提供了一部分 3D 繪圖接口。Matplotlib 通常與 NumPy、Pandas 一起使用,是資料分析中不可或缺的重要工具之一。
繪制溫度折線圖
import matplotlib.pyplot as plt
#建立繪圖資料
dates = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun']
temps = [20,25,10,15,-2,-6,8]
plt.figure(figsize=(8,6))
#設定繪圖的風格
plt.style.use('ggplot')
print(plt.style.available)
print(len(plt.style.available))
plt.plot(dates,temps)
#設定x、y軸的文字大小與顔色
plt.xticks(size=13,color='black')
plt.yticks(size=13,color='blue')
#設定x、y軸的标簽
plt.xlabel('Date(today)',size=15,color='black')
plt.ylabel('Temp(℃)',size=15,color='black')
#設定标題
plt.title('weather',fontsize=30,color='black')
#設定圖例
plt.legend(labels=['trend'])
plt.show()
面向對象繪圖
雖然使用matplotlib.pyplot子產品很容易快速生成繪圖,但建議使用面向對象的方法,因為它可以更好地控制和自定義繪圖。
Axes對象是具有資料空間的圖像區域。給定的圖形可以包含許多軸,但給定的Axes對象隻能在一個圖中。軸包含兩個(或在3D情況下為三個)Axes對象。Axes類及其成員函數是使用OOP接口的主要入口點。
figure對象通過調用add_axes()方法将Axes對象添加到圖中。它傳回軸對象并在位置rect [left,bottom,width,height]添加一個軸,其中所有數量都是圖形寬度和高度的分數。
add_axes()的參數是4個長度序列的[左,底,寬,高]數量。
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
print(ax)
# Axes(0,0;1x1)
繪制正弦函數:
import math
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 2*math.pi, 0.05)
y = np.sin(x)
fig = plt.figure()
ax = fig.add_axes([0,0,0.5,0.5])
ax.plot(x, y)
ax.set_title("sin wave")
ax.set_xlabel("angle")
ax.set_ylabel("sin(x)")
添加圖例
文法:legend(handles, labels, loc)
ax.plot()方法:ax.plot([x], y, [fmt])
y = [1, 4, 9, 16, 25,36,49, 64]
x1 = [1, 16, 30, 42,55, 68, 77,88]
x2 = [1,6,12,18,28, 40, 52, 65]
fig = plt.figure(figsize=(10,5))
ax = fig.add_axes([0,0,1,1])
ax.plot(x1, y, 'ys-')
ax.plot(x2, y, 'go--')
ax.legend(labels=('television', 'phone'), loc='lower right')
ax.set_title("廣告媒介對銷售的影響", fontproperties='SimHei')
ax.set_xlabel('廣告媒介', fontproperties='SimHei')
ax.set_ylabel('銷售', fontproperties='SimHei')
x = np.arange(0, math.pi*2, 0.05)
y = np.sin(x)
fig = plt.figure()
ax = fig.add_axes([0,0,0.6,0.6])
ax.plot(x, y, color="red", alpha=0.3, linestyle="--", lw=5)
x = [1, 16, 30, 42, 55, 68, 77, 88]
y = [1, 4, 9, 16, 25, 36, 49, 64]
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.plot(x1, y, 'r--', marker="s", markersize=20, markeredgewidth=5, markeredgecolor="g", markerfacecolor="y")
繪制子圖
原型:plt.subplot(nrows, ncols, index)
作用:傳回給定網格位置的axes對象。
fig = plt.figure(figsize=(12,6))
ax1 = plt.subplot(211)
ax1.plot(range(12))
ax2 = plt.subplot(212, facecolor='y')
ax2.plot(range(12))
通過在同一圖形畫布中添加另一個軸對象來在同一圖中添加插入另一個圖
fig = plt.figure()
x = np.arange(0, math.pi*2, 0.05)
ax1 = fig.add_axes([0,0,1,1])
y1 = np.sin(x)
ax1.plot(x, y1)
ax1.set_title("sin") #正弦
ax2 = fig.add_axes([0.55, 0.55, 0.3, 0.3])
y2 = np.cos(x)
ax2.plot(x, y2, 'r')
ax2.set_title("cos") #餘弦
通過figure類的add_subplot()函數添加子圖
fig = plt.figure()
x = np.arange(0, math.pi*2, 0.05)
ax1 = fig.add_subplot(111)
y1 = np.sin(x)
ax1.plot(x, y1)
ax2 = fig.add_subplot(222, facecolor='y')
y2 = np.cos(x)
ax2.plot(x, y2, 'r')
subplots()繪制子圖
原型:plt.subplots(nrows, ncols)
fig, axes = plt.subplots(1,3, figsize = (12,4))
x = np.arange(1,11)
# 預設網格
axes[0].plot(x, x**3, 'g', lw=2)
axes[0].grid(True)
axes[0].set_title('Default Gridlines')
# 自定義網格
axes[1].plot(x, np.exp(x), 'r')
axes[1].grid(color='b', ls = '-.', lw = 0.25)
axes[1].set_title('Custom Gridlines')
# 無網格
axes[2].plot(x,x)
axes[2].set_title('No Gridlines')
axes[2].grid(False)