顫抖在3d中使用時,如 this example 只能設置所有箭頭的長度。它不反映提供的箭頭的實際長度。如何在Python matplotlib中正確縮放3d顫音圖?
參數尺度,在2d情況下工作,在這裏似乎不起作用。
有沒有辦法縮放箭頭,使其長度反映給定的矢量場的長度?
顫抖在3d中使用時,如 this example 只能設置所有箭頭的長度。它不反映提供的箭頭的實際長度。如何在Python matplotlib中正確縮放3d顫音圖?
參數尺度,在2d情況下工作,在這裏似乎不起作用。
有沒有辦法縮放箭頭,使其長度反映給定的矢量場的長度?
這很奇怪。看起來u,v,w只是建立方向,長度參數影響所有長度相同。您不能將數組放入長度參數中。
作爲一個典型的解決辦法,你可以單獨繪製每個箭頭:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib
import numpy as np
import pylab as plt
print(matplotlib.__version__)
fig = plt.figure()
ax = fig.gca(projection='3d')
x, y, z = np.meshgrid(np.arange(-1, 1, 0.4),
np.arange(-1, 1, 0.4),
np.arange(-1, 1, 0.4))
x = x.reshape(np.product(x.shape))
y = y.reshape(np.product(y.shape))
z = z.reshape(np.product(z.shape))
scale = 0.02
u = np.sin(np.pi * x) * np.cos(np.pi * y) * np.cos(np.pi * z)
v = -np.cos(np.pi * x) * np.sin(np.pi * y) * np.cos(np.pi * z)
w = np.sqrt(2.0/3.0) * np.cos(np.pi * x) * np.cos(np.pi * y) * np.sin(np.pi * z)
lengths = np.sqrt(x**2+y**2+z**2)
for x1,y1,z1,u1,v1,w1,l in zip(x,y,z,u,v,w,lengths):
ax.quiver(x1, y1, z1, u1, v1, w1, pivot = 'middle', length=l*0.5)
ax.scatter(x,y,z, color = 'black')
plt.show()
只是圍繞文檔探針http://matplotlib.org/mpl_toolkits/mplot3d/api.html 爲您工作嗎?
仍不明顯,箭頭的長度是正確的,但至少現在看3D
from mpl_toolkits.mplot3d import Axes3D
import matplotlib
import numpy as np
print(matplotlib.__version__)
fig = plt.figure()
ax = fig.gca(projection='3d')
x, y, z = np.meshgrid(np.arange(-1, 1, 0.4),
np.arange(-1, 1, 0.4),
np.arange(-1, 1, 0.4))
scale = 0.02
u = np.sin(np.pi * x) * np.cos(np.pi * y) * np.cos(np.pi * z)
v = -np.cos(np.pi * x) * np.sin(np.pi * y) * np.cos(np.pi * z)
w = np.sqrt(2.0/3.0) * np.cos(np.pi * x) * np.cos(np.pi * y) * np.sin(np.pi * z)
ax.quiver(x, y, z, u, v, w, pivot = 'middle', arrow_length_ratio = 0.02)
ax.scatter(x,y,z, color = 'black')
plt.show()
分別設置每個長度是一個工作,周圍,但它似乎工作... 感謝您的答案! – SeF