天天看點

Python資料分析,matpotlib繪制統計圖

什麼是matplotlib?

Matplotlib 是 Python 中最受歡迎的資料可視化軟體包之一,支援跨平台運作,它是 Python 常用的 2D 繪圖庫,同時它也提供了一部分 3D 繪圖接口。Matplotlib 通常與 NumPy、Pandas 一起使用,是資料分析中不可或缺的重要工具之一。

Python資料分析,matpotlib繪制統計圖

繪制溫度折線圖

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)           
Python資料分析,matpotlib繪制統計圖

繪制正弦函數:

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)")           
Python資料分析,matpotlib繪制統計圖

添加圖例

文法:legend(handles, labels, loc)

Python資料分析,matpotlib繪制統計圖
Python資料分析,matpotlib繪制統計圖

ax.plot()方法:ax.plot([x], y, [fmt])

Python資料分析,matpotlib繪制統計圖
Python資料分析,matpotlib繪制統計圖
Python資料分析,matpotlib繪制統計圖
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')           
Python資料分析,matpotlib繪制統計圖
Python資料分析,matpotlib繪制統計圖
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)           
Python資料分析,matpotlib繪制統計圖
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")           
Python資料分析,matpotlib繪制統計圖

繪制子圖

原型: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))           
Python資料分析,matpotlib繪制統計圖

通過在同一圖形畫布中添加另一個軸對象來在同一圖中添加插入另一個圖

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")    #餘弦           
Python資料分析,matpotlib繪制統計圖

通過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')           
Python資料分析,matpotlib繪制統計圖

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)           
Python資料分析,matpotlib繪制統計圖