如何在3D Quiver图中仅显示x>0、y>0、z<0的指定象限
实现指定象限的3D矢量绘制
要仅显示满足x>0、y>0且z<0的矢量点,可通过布尔索引筛选符合条件的坐标与导数数据,再传入Quiver3D绘制。以下是修改后的完整代码:
import numpy as np from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt b=75 T=50 steps = 4 valuelist = [0] for i in range(1,steps+1): valuelist = [-i/steps] + valuelist valuelist.append(i/steps) r = len(valuelist) x, y, z = np.meshgrid(np.linspace(-1,1,r), np.linspace(-1,1,r), np.linspace(-1,1,r)) u = np.zeros((r,r,r)) v = np.zeros((r,r,r)) w = np.zeros((r,r,r)) # 计算导数(注意原函数名derivative-one-step不符合Python命名规范,已修正为合法命名) for i in range(r): for j in range(r): for k in range(r): initial_values = [valuelist[i], valuelist[j], valuelist[k]] deriv = derivative_one_step(initial_values, b) u[i,j,k] = deriv[0] v[i,j,k] = deriv[1] w[i,j,k] = deriv[2] # 筛选目标象限的点 mask = (x > 0) & (y > 0) & (z < 0) x_filtered = x[mask] y_filtered = y[mask] z_filtered = z[mask] u_filtered = u[mask] v_filtered = v[mask] w_filtered = w[mask] # 绘制3D矢量图 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.quiver(x_filtered, y_filtered, z_filtered, u_filtered, v_filtered, w_filtered) # 固定坐标轴范围为-1到1 ax.set_xlim([-1, 1]) ax.set_ylim([-1, 1]) ax.set_zlim([-1, 1]) plt.show()
核心要点:
- 布尔索引筛选:通过逻辑与运算生成筛选掩码,精准提取目标象限的所有数据点,避免无效计算与绘制。
- 函数名修正:原代码中
derivative-one-step包含非法连字符,改为符合Python规范的derivative_one_step(需确保你实际的导数计算函数已按此命名)。 - 范围控制:通过
set_xlim等方法固定坐标轴范围,匹配你要求的-1到1数值区间。
内容的提问来源于stack exchange,提问作者Hani
相关产品推荐
相关产品推荐

