【发布时间】:2013-07-10 17:54:56
【问题描述】:
我正在尝试创建一个绘图来显示水平面上的温度梯度。我能够降低颜色,但它没有按照我需要的方式进行插值。 This question 有助于创建情节。绘制绘图时,似乎这些点的权重不均等。 This 是图表当前的外观。它应该看起来像彩条,因为顶部两点是 23.7,底部两点是 23.4。我使用的代码是:
xi, yi = np.linspace(xm, xM, 500), np.linspace(ym, yM, 500)
xi, yi = np.meshgrid(xi, yi)
xo=[0, 0, 2, 2]
yo=[0, 2, 0, 2]
ao=[23.4, 23.7, 23.4, 23.7]
rbf = scipy.interpolate.Rbf(xo, yo, ao, function='linear')
ai = rbf(xi, yi)
plt.xlabel('X')
plt.ylabel('Y')
plt.imshow(ai, vmin=am, vmax=aM, origin='lower', extent=[xm, xM, ym, yM])
plt.scatter(xo, yo, c=ao)
plt.colorbar()
plt.show()
【问题讨论】:
-
发生的情况是由于您的 z 值的绝对值比 x 和 y 值大约 10 倍。在求解适当的权重时,这会导致数值稳定性问题。 Scipy 应该做一些健全性检查并“白化”(又名重新缩放)输入数据,但它没有。您应该能够通过在插值之前对
ao进行简单的线性重新缩放然后对结果进行逆运算来解决您的问题。 -
我的猜测是您的 'vmin' 和 'vmax' 值是错误的,我通过将它们设置为 'ao.min()' 和 'ao.max()' 进行了尝试,结果出来了像这样:i.imgur.com/8Om1YdG.png
-
好吧,我在之前的评论中犯了一个错误。它应该是
ai.min()和ai.max()这很重要。或者你可以直接跳过它们,matplotlib 会自动修复它。 -
@JoeKington 我该怎么做?
标签: python matplotlib