Matplotlib 2.0对数刻度屏蔽imshow与1.53非常不同

时间:2017-01-25 01:30:59

标签: python matplotlib imshow

我最近从MPL 1.53升级到2.0,它打破了我的一些情节。特别是我无法修复的一个是使用带有日志规范化的imshow,在带有掩码数组的x和y的对数刻度上。我也许可以使用pcolor,pcolormesh或其他,但我的2D数组非常大(如20,000 X 20,000或更大),而pcolor消耗超过30GB的RAM来制作这个情节。我附上了使用相同源代码生成的2张图片。一个用matplotlib 2.0.0运行,另一个在卸载MPL 2.0.0并安装MPL 1.53后运行。有人可以帮我弄清楚为什么新版本才能赢得工作吗?

我已经编辑了这个问题以包含一个完整的工作示例,示例数据不会产生2.0的空白图,但看起来非常不同。

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

def power_law(x,b):
    return b*(x**0.2)

x=np.logspace(9,16,100)
y=np.logspace(1,3.5,100)
Z=[]
for xi in x:
    zy=[]
    for yi in y:
        if power_law(xi,0.25)<yi and yi <power_law(xi,0.6):
            zy.append(yi*xi)
        else:
            zy.append(np.nan)
    Z.append(zy)
Z=np.array(Z)

Ziv=~np.isnan(Z)
Zval=Z[Ziv]
vmin,vmax=np.amin(Zval),np.amax(Zval)

fig,ax=plt.subplots()
ax.set_xscale('log')
ax.set_yscale('log')
ax.set_ylim(1E9,1E16)
ax.set_ylim(20,2000)

extent=[x[0],x[-1],y[0],y[-1]]
norm=mpl.colors.LogNorm(vmin=vmin,vmax=vmax)
ax.imshow(Z,extent=extent,aspect='auto',origin='lower',cmap='jet',
          vmin=vmin,vmax=vmax,norm=norm)
plt.show()

使用matplotlib 1.53的结果:

enter image description here

使用matplotlib 2.0.0的结果:

enter image description here

有人可以帮我弄清楚这两个版本之间的变化以及如何让它再次使用2.0?

0 个答案:

没有答案