視覺化庫-Matplotlib-3D圖(第四天)
阿新 • • 發佈:2019-01-08
1. 畫三維圖片圖 axes = Axes3D(fig)這一步將二維座標轉換為三維座標,axes.plot_surface()
import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() # 將二維轉換為三維的情況 axes = Axes3D(fig) x = np.arange(-4, 4, 0.25) y = np.arange(-4, 4, 0.25) X, Y = np.meshgrid(x, y) Z = np.sin(np.sqrt(X**2 + Y**2))# 畫三維曲面圖,rstride=1, cstride=1表示曲面的一個方格的位置 axes.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow') # 畫出投影, zm表示投影的方向,offset表示投影所處位置,cmap表示使用的colormap axes.contour(X, Y, Z, zm='Z', offset=-2, cmap='rainbow') # 擴大z軸的範圍使得圖看起來更加的壓縮 axes.set_zlim(-2, 2) plt.show()
2. 構造三維座標系的兩種方法, 同時畫三維曲線圖ax=fig.add_subplot(111, projection='3d') ax = fig.gca(projection='3d'),同時畫三維曲線圖
# 構造座標軸的方法1 fig = plt.figure() # 構造了三維的座標軸 ax = fig.add_subplot(111, projection='3d') plt.show() # 構造座標軸的方法2 figure = plt.figure() ax = figure.gca(projection='3d') theta = np.linspace(-4 * np.pi, 4*np.pi, 100) z = np.linspace(-2, 2, 100) r = z**2 + 1 x = np.sin(theta) * r y = np.cos(theta) * r ax.plot(x, y, z, color='r') plt.show()
3. 畫三維散點圖 ax.plot # plt.view_init(40, 20)進行視角的變化
np.random.seed(0) # 用於生成隨機點 def randrange(n, vmin, vmax): return (vmax-vmin)*np.random.randn(n) + vmin fig = plt.figure() ax = fig.add_subplot(111, projection='3d') n = 100 for c, m, zlow, zhigh in [('r', 'o', -50, -25), ('b', '^', -30, -5)]: xs = randrange(100, 23, 32) ys = randrange(100, 0, 100) zs = randrange(100, zlow, zhigh) ax.scatter(xs, ys, zs, marker=m, color=c)
# 進行視角的變化 plt.view_init(40, 20) plt.show()
4.畫三維條形圖(有一點問題)帶有顏色編碼的條形圖
fig = plt.figure() ax = fig.add_subplot(111, projection='3d') for c, z in zip(['r', 'g', 'b', 'y'], [30, 20, 10, 0]): xs = np.arange(20) ys = np.random.rand(20)
cs = [c] * len(len(xs)) ax.bar(xs, ys, zs=z, zdir='y', color=cs) plt.show()