matplotlib繪制常見圖形的實現方法


1、條形圖(柱狀圖)

  繪制柱狀圖的相關API:

 1 plt.figure('Bar', facecolor='lightgray')  2 plt.bar(  3     x,                # 水平坐標數組
 4     y,                # 柱狀圖高度數組
 5     width,            # 柱子的寬度
 6     bottom,           # 柱子的底部基准位置
 7     color='',         # 填充顏色
 8     label='',         # 標簽  9     alpha=0.2         # 透明度

  示例:

 1 import numpy as np  2 import matplotlib.pyplot as plt  3 
 4 apples = np.random.randint(10, 30, size=10)  5 oranges = np.random.randint(50, 70, size=10)  6 
 7 plt.figure('Bar', facecolor='lightgray')  8 plt.title('Bar', fontsize=14)  9 plt.xlabel('Month', fontsize=14) 10 plt.ylabel('Data', fontsize=14) 11 plt.grid(linestyle=':', axis='y') 12 x = np.arange(apples.size) 13 plt.bar(x - 0.2, apples, 0.4, color='fuchsia', label='Apple', align='center') 14 y = np.arange(oranges.size) 15 plt.bar(y + 0.2, oranges, 0.4, color='lime', label='orange', align='center') 16 plt.xticks(x, ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct']) 17 plt.legend(loc='best') 18 plt.savefig('images/bar.png') 19 plt.show()

  運行結果:

 

2、餅圖

  繪制餅狀圖的基本API:

 1 plt.pie(  2     values,             # 值列表 
 3     spaces,             # 扇形之間的間距列表
 4     labels,             # 標簽列表
 5     colors,             # 顏色列表
 6     '%d%%',           # 標簽所占比例格式
 7     shadow=True,       # 是否顯示陰影
 8     startangle=90      # 逆時針繪制餅狀圖時的起始角度
 9     radius=1           # 半徑

  示例:

 1 import numpy as np  2 import matplotlib.pyplot as plt  3 
 4 values = [25, 71, 38, 29, 16]  5 spaces = [0.1, 0.1, 0.1, 0.1, 0.1]  6 labels = ['Java', 'Javascript', 'Python', 'PHP', 'C++']  7 colors = ['dodgerblue', 'orangered', 'limegreen', 'cyan', 'gold']  8 
 9 plt.figure('Pie', facecolor='lightgray') 10 plt.axis('equal') 11 plt.pie(values, spaces, labels, colors, '%.2f%%', shadow=True, radius=1, startangle=90) 12 plt.legend(loc='best') 13 plt.savefig('images/pie.png') 14 plt.show()

  運行結果:

3、等高線圖

  繪制等高線圖的基本API:

 1 cntr = plt.contour(  2     x,         # 網格坐標矩陣的x坐標 (2維數組)
 3     y,         # 網格坐標矩陣的y坐標 (2維數組)
 4     z,         # 網格坐標矩陣的z坐標 (2維數組)
 5     8,                     # 把等高線繪制成8部分
 6     colors='black',        # 等高線的顏色
 7     linewidths=0.5        # 線寬
 8 )  9 
10 # 為等高線圖添加高度標簽
11 plt.clabel(cntr, inline_spacing=1, fmt='%.1f',fontsize=10) 12 plt.contourf(x, y, z, 8, cmap='jet')

  示例:

import numpy as np
import matplotlib.pyplot as plt

n = 500
x, y = np.meshgrid(np.linspace(-3, 3, n), np.linspace(-3, 3, n))
# print(x)
# print(y)
z = (1 - x / 2 + x ** 5 + y ** 3) * np.exp(-x ** 2 - y ** 2)

plt.figure('Contour', facecolor='lightgray')
plt.title('Contour', fontsize=16)
cont = plt.contour(x, y, z, 8, colors='black', linewidths=0.75)
plt.clabel(cont, inline_spacing=5, fmt='%.1f', fontsize=10)
plt.contourf(x, y, z, 8, cmap='Pastel1')
plt.savefig('images/contour.png')
plt.show()

  運行結果:

4、熱成像圖

  繪制熱成像圖的基本API:

1 #   origin: 坐標軸方向
2 # upper: 缺省值,原點在左上角
3 # lower: 原點在左下角
4 plt.imshow(z, cmap='jet', origin='low')

  示例:

 1 import numpy as np  2 import matplotlib.pyplot as plt  3 
 4 n = 500
 5 x, y = np.meshgrid(np.linspace(-3, 3, n), np.linspace(-3, 3, n))  6 # print(x)
 7 # print(y)
 8 z = (1 - x / 2 + x ** 5 + y ** 3) * np.exp(-x ** 2 - y ** 2)  9 
10 # 繪制熱成像圖
11 plt.figure('Contour', facecolor='lightgray') 12 plt.title('Contour', fontsize=16) 13 cont = plt.contour(x, y, z, 8, colors='black', linewidths=0.75) 14 plt.imshow(z, cmap='jet', origin='lower') 15 plt.colorbar() 16 plt.savefig('images/imshow.png') 17 plt.show()

  運行結果:

5、極坐標圖

  繪制極坐標圖的基本API:

plt.gca(projection='polar')

  示例:

 1 import numpy as np  2 import matplotlib.pyplot as plt  3 
 4 theta = np.linspace(0, 4 * np.pi, 1000)  5 r = 0.8 * theta  6 plt.figure("Polar", facecolor='lightgray')  7 plt.gca(projection='polar')  8 plt.title('Polar', fontsize=16)  9 plt.xlabel(r'$\theta$') 10 plt.ylabel(r'$\rho$') 11 plt.grid(linestyle=':') 12 plt.plot(theta, r) 13 x = np.linspace(0, 6 * np.pi, 1000) 14 y = 3 * np.sin(6 * x) 15 plt.plot(x, y) 16 plt.savefig('images/polar.png') 17 plt.show()

  運行結果:

6、3D圖形

  (1)、3D散點圖

    3D散點圖繪制基本API:

 1 from mpl_toolkits.mplot3d import axes3d  2 ax3d = plt.gca(projection='3d')   # class axes3d
 3 
 4 ax3d.scatter(..)        # 繪制三維點陣
 5 ax3d.scatter(  6     x,                 # x軸坐標數組
 7     y,                # y軸坐標數組
 8     z,                # z軸坐標數組
 9     marker='',         # 點型
10     s=10,            # 大小
11     zorder='',        # 圖層序號
12     color='',        # 顏色
13     edgecolor='',     # 邊緣顏色
14     facecolor='',    # 填充色
15     c=v,            # 顏色值 根據cmap映射應用相應顏色
16     cmap=''            # 
17 )

  示例:

 1 import numpy as np  2 import matplotlib.pyplot as plt  3 from mpl_toolkits.mplot3d import axes3d  4 
 5 n = 300
 6 x = np.random.normal(0, 1, n)  7 y = np.random.normal(0, 1, n)  8 z = np.random.normal(0, 1, n)  9 
10 plt.figure('3D Points', facecolor='lightgray') 11 ax3d = plt.gca(projection='3d') 12 ax3d.set_xlabel('X') 13 ax3d.set_ylabel('Y') 14 ax3d.set_zlabel('Z') 15 d = x**2 + y**2 + z**2
16 ax3d.scatter(x, y, z, s=60, alpha=0.7, c=d,cmap='jet') 17 plt.tight_layout() 18 plt.savefig('images/3dscatter.png') 19 plt.show()

  運行結果:

  (2)、3D平面圖

    繪制3D平面圖的API:

1 ax3d.plot_surface( 2     x,         # 網格坐標矩陣的x坐標 (2維數組)
3     y,         # 網格坐標矩陣的y坐標 (2維數組)
4     z,         # 網格坐標矩陣的z坐標 (2維數組)
5     rstride=30,            # 行跨距
6     cstride=30,           # 列跨距
7     cmap='jet'             # 顏色映射
8 )

    示例:

import numpy as np
import matplotlib.pyplot as mp
from mpl_toolkits.mplot3d import axes3d

n = 1000
x, y = np.meshgrid(np.linspace(-3, 3, n), np.linspace(-3, 3, n))
z = (1 - x / 2 + x ** 5 + y ** 3) * np.exp(-x ** 2 - y ** 2)

mp.figure('3D Surface', facecolor='lightgray')
ax3d = mp.gca(projection='3d')
ax3d.plot_surface(x, y, z, cstride=20,rstride=20, cmap='Pastel1')
mp.tight_layout()
mp.savefig('images/3dsurface.png')
mp.show()

    運行結果:

  (3)、3D線框圖

    繪制3D線框圖的API:

1 # rstride: 行跨距
2 # cstride: 列跨距 
3 ax3d.plot_wireframe(x,y,z,rstride=30,cstride=30, linewidth=1, color='dodgerblue')

    示例:

 1 import numpy as np  2 import matplotlib.pyplot as plt  3 from mpl_toolkits.mplot3d import axes3d  4 
 5 n = 1000
 6 x, y = np.meshgrid(np.linspace(-3, 3, n), np.linspace(-3, 3, n))  7 z = (1 - x / 2 + x ** 5 + y ** 3) * np.exp(-x ** 2 - y ** 2)  8 
 9 plt.figure('3D Wireframe', facecolor='lightgray') 10 ax3d = plt.gca(projection='3d') 11 ax3d.plot_wireframe(x, y, z, cstride=20,rstride=20, linewidth=0.5,color='orangered') 12 plt.tight_layout() 13 plt.savefig('images/3dwireframe.png') 14 plt.show()

    運行結果:

 7、直方圖

  繪制直方圖的基本API:

1 n, bins, patches = plt.hist( 2     x,         # 這個參數是指定每個bin(箱子)分布的數據,對應x軸
3     50,         # 這個參數指定bin(箱子)的個數,也就是總共有幾條條狀圖
4     density=1, # bool值,默認為false,顯示的是頻數統計結果
5     edgecolor='navy', 6     facecolor='lime', 7     alpha=0.75
8 )    # 返回值n為數組或數組列表每一個bar區間的數量或者百分比,bins為表示bar的范圍的數組,patches為表示圖形對象的列表

  示例:

 1 import numpy as np  2 import matplotlib.pyplot as plt  3 
 4 mu = 100
 5 sigma = 15
 6 x = mu + sigma * np.random.randn(10000)  7 plt.figure('Hist', facecolor='lightgray')  8 plt.title('Histogram of IQ', fontsize=16)  9 n, bins, patches = plt.hist( 10     x, 50, density=True, edgecolor='slategray', facecolor='lime', alpha=0.75
11 ) 12 plt.xlabel('Smarts') 13 plt.ylabel('Probability') 14 plt.text(60, .025, r'$\mu=100,\ \sigma=15$') 15 plt.axis([40, 160, 0, 0.03]) 16 plt.plot(bins[1:]-1, n, color='orangered')# 以每個區間的中點繪制折線 17 plt.grid(linestyle=':') 18 plt.tight_layout() 19 plt.savefig('images/hist.png') 20 plt.show()

  運行結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM