我尝试使用 matplotlib 的plot_surface 制作简单的 3D 绘图,下面是最小的示例:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
x_test = np.arange(0.001, 0.01, 0.0005)
y_test = np.arange(0.1, 100, 0.05)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
Xtest, Ytest = np.meshgrid(x_test, y_test)
Ztest = Xtest**-1 + Ytest
surf = ax.plot_surface(Xtest, Ytest, Ztest,
cmap=cm.plasma, alpha=1,
antialiased=False)
fig.colorbar(surf, shrink=0.5, aspect=5)
ax.set_ylabel(r'$ Y $', fontsize=16)
ax.set_xlabel(r'$ X $', fontsize=16)
ax.set_zlabel(r'$ Z $', fontsize=16)
结果给出了奇怪的颜色图,它并不代表 z 尺度的大小,正如您可以从这里看到的3D 绘图结果。我的意思是,如果你沿着 Z 轴不变的直线,你不会看到相同的颜色。我尝试更改ccount
andrcount
内部plot_surface
函数或更改 Xtest 或 Ytest 数据的间隔,但没有任何帮助。我尝试了这里和这里的一些建议。但似乎没有关联。
你能帮我解决这个问题吗?这似乎是一个简单的问题,但我无法解决。谢谢!
编辑
我添加了示例,但使用了我没有在这里写的原始方程(它很复杂),请看一下:Comparison。左图是在 Matlab 中完成的(由我的顾问完成),右图是使用 matplotlib 完成的。您可以清楚地看到左侧的图确实很有意义,最亮的颜色始终位于最大 z 轴上。不幸的是,我不懂matlab。我希望我可以使用 python 来做到这一点,希望这次编辑能让问题更清楚。
编辑2 我确信这不是最好的解决方案。这就是为什么我把它放在这里,而不是作为答案。正如 @swatchai 建议使用contour3D
. 由于曲面是一组线,因此我可以通过绘制大量轮廓线来生成正确的结果,方法是:
surf = ax.contour3D(Xtest, Ytest, Ztest, 500, cmap=cm.plasma, alpha=0.5, antialiased=False)
正如您可以从这里看到的那样,颜色图是正确的alternative1 但情节非常沉重。当你放大时,它看起来不太好,除非你再次增加轮廓的数量。欢迎任何建议:)。
收到一只叮咚
慕丝7291255
弑天下
相关分类