当在3d中使用箭袋时,如this example,只能设置所有箭头的长度。它不反映所提供箭头的实际长度。在二维情形下有效的论证尺度,在这里似乎不起作用。有没有一种方法来缩放箭头,使其长度反映给定向量场的长度?
368yc8dk1#
只是在文档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()
6mw9ycah2#
很奇怪,似乎u,v,w,只是确定方向,长度参数对所有长度的影响都是一样的。不能将数组放入length参数中。作为一种典型的变通方法,您可以单独绘制每个箭头:
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()
2条答案
按热度按时间368yc8dk1#
只是在文档http://matplotlib.org/mpl_toolkits/mplot3d/api.html周围戳了一下,这对你有用吗?
仍然不明显箭头长度是正确的,但至少现在看起来是3D的
6mw9ycah2#
很奇怪,似乎u,v,w,只是确定方向,长度参数对所有长度的影响都是一样的。不能将数组放入length参数中。
作为一种典型的变通方法,您可以单独绘制每个箭头: