我有以下表格数据(请看图片) 我想用python绘制一个曲面图。使用matplotlib中的曲面打印
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
X=[2,3,5,8,20,30,50,80,100,150,175,200,250,300]
Y=[2,3,4,5,10,15,20,30,40,50,80,100,125,150,175,200]
Y,X=np.meshgrid(Y,X)
Z=np.array([
[0.2885307,0.269452,0.259193,0.2548041,0.2731868,0.4801551,0.7992361,1.7577641,3.2611327,5.428839,19.647976,37.59729,78.0871,152.21466,268.14572,0],
[0.2677955,0.2538363,0.2380033,0.2306999,0.4779794,0.9251045,1.5448972,3.508644,6.4968576,11.252151,0,0,0,0,0,0],
[0.2432982,0.2283371,0.2514196,0.3392502,0,0,0,0,0,0,0,0,0,0,0,0],
[0.2342575,0.3158406,0.4770729, 0.6795485,2.353042, 5.260077,9.78172,25.87004,59.52568, 0,0,0,0,0,0,0],
[0.6735384, 1.3873291,2.346506, 3.5654,0,0,0,0,0,0,0,0,0,0,0,0],
[1.3584715, 2.9405127,5.096819,8.155857,0,0,0,0,0,0,0,0,0,0,0,0],
[3.558062,8.216592,15.768077,27.386694,0,0,0,0,0,0,0,0,0,0,0,0],
[9.537899,25.202589,58.20041,0,0,0,0,0,0,0,0,0,0,0,0,0],
[16.083374,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[54.936775,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[89.185974,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]])
my_col = cm.jet(Z/np.amax(Z))
surf = ax.plot_surface(X, Y, Z,cmap=cm.coolwarm,linewidth=0, antialiased=False)
ax.set_zlim(0, 300)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()
这是正确的,但不是很有吸引力或直观。我怎样才能使可视化更平滑和清晰?请注意,我的数据中有许多空白。我应该为空格使用“zero”还是“nan”(不是数字)?对于相同的数据,excel显示了更好的图形。 为了使python绘图更具视觉吸引力,我感谢您的输入
matplotlib和excel绘图之间的区别在于matplotlib是以线性比例绘制的,而excel是对数的(或者看起来像对数轴但实际上看不到的东西)。因此,在matplotlib中,坡度看起来非常陡峭,但在excel中,坡度被原木显著拉伸
不幸的是,matplotlib还没有在3D中运行良好的日志轴。我不知道这是为什么,但这是一个严重的缺点。但是,如果在进行绘图之前获取X和Y数据的
log10
,则可以看到类似于Excel的绘图。您还可以进一步DIY您自己的日志轴,但我刚刚使用tick格式化程序对其进行了简化编辑:
回到这个问题后,我意识到Excel绘图实际上并没有显示对数轴,而是以相等的间距沿着轴绘制给定的
X
和Y
值,即使这些值没有明确的数学级数需要注意的是,这并不是数据的良好表示,因为它给人的印象是它是对数的(对于提供的特定数据),但实际上不是,尽管需要非常仔细的检查才能看到它。在这里,相邻数字之间的间隔甚至不是单调的
所以我不鼓励这种表示法,但为了重现Excel绘图,我建议制作等距数据,但用不同的数字标记(仅此一句就足以阻止这种方法)。但以下是代码和方法:
如果想要显示为
X
和Y
给出的特定数字,一种解决方案是使用对数轴绘制(因为数字的间隔非常近似于对数),然后通过轴上的线专门绘制数字,或者,不要使用这些数字而不是通常的规则间隔的数字。(但要将它们绘制为轴值,和以固定的间隔将它们隔开,这是一个问题。)相关问题 更多 >
编程相关推荐