2024-06-25 23:21:49 发布
网友
我正在使用另一个SO post(Matplotlib scatter plot legend(顶部答案))的代码在3D中绘制一个基本的散射图,但是我想让点的不透明度相对于点的深度,就像ax.scatterdepthshade=True。在
ax.scatter
depthshade=True
我不得不使用ax.plot,因为ax.scatter似乎不能很好地处理3D图上的图例。在
ax.plot
我想知道是否有一种方法可以让ax.plot获得相似的美学效果。在
谢谢!在
看起来你在这方面运气不好,似乎plot没有depthshade=True功能。我想问题是plot不能像scatter那样为每个点设置不同的颜色(或alpha值),我猜这就是depthshade的应用方式。在
一个解决方案是循环所有点,并一个一个地设置颜色,同时使用mpl_toolkits.mplot3d.art3d.zalpha辅助函数来提供深度。在
mpl_toolkits.mplot3d.art3d.zalpha
import mpl_toolkits from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.add_subplot(111, projection='3d') n = 100 xs = np.random.rand(n) ys = np.random.rand(n) zs = np.random.rand(n) color = [1,0,0,1] #Get normal to camera alpha= ax.azim*np.pi/180. beta= ax.elev*np.pi/180. n = np.array([np.cos(alpha)*np.sin(beta), np.sin(alpha)*np.cos(beta), np.sin(beta)]) ns = -np.dot(n, [xs, ys, zs]) cs = mpl_toolkits.mplot3d.art3d.zalpha(color, ns) for i in range(xs.shape[0]): ax.plot([xs[i]], [ys[i]], [zs[i]], 'o', color=cs[i]) plt.show()
一个棘手的问题是需要使用相机位置ax.elev和{}来计算法向量。此外,当您旋转相机的位置时,它将不再是正确的颜色。要解决此问题,可以注册一个更新事件,如下所示:
ax.elev
看起来你在这方面运气不好,似乎plot没有
depthshade=True
功能。我想问题是plot不能像scatter那样为每个点设置不同的颜色(或alpha值),我猜这就是depthshade的应用方式。在一个解决方案是循环所有点,并一个一个地设置颜色,同时使用
mpl_toolkits.mplot3d.art3d.zalpha
辅助函数来提供深度。在一个棘手的问题是需要使用相机位置}来计算法向量。此外,当您旋转相机的位置时,它将不再是正确的颜色。要解决此问题,可以注册一个更新事件,如下所示:
^{pr2}$ax.elev
和{相关问题 更多 >
编程相关推荐