我有来自模拟的数据,其中结果是2个参数xval
和yval
的函数。 yval
的抽样是有规律的,但xval
的抽样是不规则的。
我有xval
和yval
对的每个组合的模拟结果,我可以用等高线图绘制结果。这是一个简化的例子:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as colors
xval = np.array([ 10, 15, 20, 25, 30, 35, 40, 45, 50, 60, 70, 80, 90, 100, 250, 500])
yval = np.array([ 6, 12, 16, 22, 26, 32, 38, 42, 48, 52, 58, 62, 68, 74, 78, 84, 88, 94])
xx, yy = np.meshgrid(xval, yval)
sim = np.exp(-(xx/20)) # very deterministic simulation!
levels = np.sort(sim.mean(axis=0))
plt.clf()
plt.contour(xval, yval, sim, colors='k', vmin=1e-10, vmax=sim.max(), levels=levels)
我故意将轮廓的级别设置为模拟的值。结果如下:
现在我想将sim
数组覆盖在此轮廓图上作为图像。我使用了以下命令:
plt.imshow(sim, interpolation='nearest', origin=1, aspect='auto', vmin=1e-10, vmax=sim.max(),
extent=(xval.min(), xval.max(), yval.min(), yval.max()), norm=colors.LogNorm())
结果如下:
正如您所看到的那样,轮廓和sim
数据在图中不匹配。这看起来很正常,因为imshow
方法不会将xval
和yval
值作为参数,因此它不知道提供模拟的(xval,yval)
点。
现在的问题是:如何让我的图像数据与轮廓相匹配?我是否需要重新插值sim
数组,或者我可以使用matplotlib
中的其他命令吗?
答案 0 :(得分:1)
您想使用pcolormesh
,它需要x和y坐标作为输入。
plt.pcolormesh(xx,yy,sim)
完整示例:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as colors
xval = np.array([ 10, 15, 20, 25, 30, 35, 40, 45, 50, 60, 70, 80, 90, 100, 250, 500])
yval = np.array([ 6, 12, 16, 22, 26, 32, 38, 42, 48, 52, 58, 62, 68, 74, 78, 84, 88, 94])
xx, yy = np.meshgrid(xval, yval)
sim = np.exp(-(xx/20.)) # very deterministic simulation!
levels = np.sort(sim.mean(axis=0))
plt.contour(xval, yval, sim, colors='k', vmin=1e-10, vmax=sim.max(), levels=levels)
plt.pcolormesh(xx,yy,sim, vmin=1e-10, vmax=sim.max(), norm=colors.LogNorm())
plt.show()