1. 程式人生 > >視覺化庫-Matplotlib-3D圖(第四天)

視覺化庫-Matplotlib-3D圖(第四天)

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()