You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
importmatplotlibimportmatplotlib.pyplotaspltimportnumpyasnpplt.rcParams['figure.figsize'] =10,10classMidpointNormalize(matplotlib.colors.Normalize):
def__init__(self, vmin=None, vmax=None, midpoint=None, clip=False):
self.midpoint=midpointmatplotlib.colors.Normalize.__init__(self, vmin, vmax, clip)
def__call__(self, value, clip=None):
# Note that I'm ignoring clipping and other edge cases here.result, is_scalar=self.process_value(value)
x, y= [self.vmin, self.midpoint, self.vmax], [0, 0.5, 1]
returnnp.ma.array(np.interp(value, x, y), mask=result.mask, copy=False)
# make these smaller to increase the resolutiondx, dy=0.15, 0.05# generate 2 2d grids for the x & y boundsy, x=np.mgrid[slice(-3, 3+dy, dy),
slice(-3, 3+dx, dx)]
z= (1-x/2.+x**5+y**3) *np.exp(-x**2-y**2)
z=z[:-1, :-1]
z_min, z_max=-np.abs(z).max(), np.abs(z).max()
z [0:2,0:2] =np.nanplt.pcolormesh(x, y, z, cmap='seismic',norm=MidpointNormalize(midpoint=0.,vmin=-3,vmax=3))
plt.title('pcolormesh')
plt.axis([x.min(), x.max(), y.min(), y.max()])
plt.colorbar(extend='min')
plt.tight_layout(w_pad=0.1, h_pad=1)
plt.savefig('test.png', dpi=720)
Actual outcome
E:\miniconda3\envs\satpy\lib\site-packages\matplotlib\colorbar.py:1042: RuntimeWarning: invalid value encountered in true_divide
z = np.take(y, i0) + (xn - np.take(b, i0)) * dy / db
E:\miniconda3\envs\satpy\lib\site-packages\matplotlib\transforms.py:402: RuntimeWarning: invalid value encountered in double_scalars
return points[1, 0] - points[0, 0]
Traceback (most recent call last):
File "C:\Users\Xin\Desktop\test_extend.py", line 37, in <module>
plt.savefig('test.png', dpi = 720)
File "E:\miniconda3\envs\satpy\lib\site-packages\matplotlib\pyplot.py", line 689, in savefig
res = fig.savefig(*args, **kwargs)
File "E:\miniconda3\envs\satpy\lib\site-packages\matplotlib\figure.py", line 2094, in savefig
self.canvas.print_figure(fname, **kwargs)
File "E:\miniconda3\envs\satpy\lib\site-packages\matplotlib\backend_bases.py", line 2075, in print_figure
**kwargs)
File "E:\miniconda3\envs\satpy\lib\site-packages\matplotlib\backends\backend_agg.py", line 510, in print_png
FigureCanvasAgg.draw(self)
File "E:\miniconda3\envs\satpy\lib\site-packages\matplotlib\backends\backend_agg.py", line 402, in draw
self.figure.draw(self.renderer)
File "E:\miniconda3\envs\satpy\lib\site-packages\matplotlib\artist.py", line 50, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File "E:\miniconda3\envs\satpy\lib\site-packages\matplotlib\figure.py", line 1649, in draw
renderer, self, artists, self.suppressComposite)
File "E:\miniconda3\envs\satpy\lib\site-packages\matplotlib\image.py", line 138, in _draw_list_compositing_images
a.draw(renderer)
File "E:\miniconda3\envs\satpy\lib\site-packages\matplotlib\artist.py", line 50, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File "E:\miniconda3\envs\satpy\lib\site-packages\matplotlib\axes\_base.py", line 2628, in draw
mimage._draw_list_compositing_images(renderer, self, artists)
File "E:\miniconda3\envs\satpy\lib\site-packages\matplotlib\image.py", line 138, in _draw_list_compositing_images
a.draw(renderer)
File "E:\miniconda3\envs\satpy\lib\site-packages\matplotlib\artist.py", line 50, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File "E:\miniconda3\envs\satpy\lib\site-packages\matplotlib\axis.py", line 1185, in draw
ticks_to_draw = self._update_ticks(renderer)
File "E:\miniconda3\envs\satpy\lib\site-packages\matplotlib\axis.py", line 1023, in _update_ticks
tick_tups = list(self.iter_ticks()) # iter_ticks calls the locator
File "E:\miniconda3\envs\satpy\lib\site-packages\matplotlib\axis.py", line 967, in iter_ticks
majorLocs = self.major.locator()
File "E:\miniconda3\envs\satpy\lib\site-packages\matplotlib\ticker.py", line 1985, in __call__
return self.tick_values(vmin, vmax)
File "E:\miniconda3\envs\satpy\lib\site-packages\matplotlib\ticker.py", line 1993, in tick_values
locs = self._raw_ticks(vmin, vmax)
File "E:\miniconda3\envs\satpy\lib\site-packages\matplotlib\ticker.py", line 1932, in _raw_ticks
nbins = np.clip(self.axis.get_tick_space(),
File "E:\miniconda3\envs\satpy\lib\site-packages\matplotlib\axis.py", line 2159, in get_tick_space
return int(np.floor(length / size))
ValueError: cannot convert float NaN to integer
Expected outcome
Tmp solution
Add the min and max of z to vmin and vmax:
plt.pcolormesh(x, y, z, vmin=z_min, vmax=z_max, cmap='seismic',norm=MidpointNormalize(midpoint=0.,vmin=-3,vmax=3))
However, it doesn't work if the vmin or vmax is beyond that:
plt.pcolormesh(x, y, z, vmin=-2, vmax=z_max, cmap='seismic',norm=MidpointNormalize(midpoint=0.,vmin=-3,vmax=3))
Matplotlib version
Operating system: Win 10
Matplotlib version: 3.0.3 (conda-forge)
Matplotlib backend: TkAgg
Python version: 3.6.7
The text was updated successfully, but these errors were encountered:
Bug report
Bug summary
Code for reproduction
Actual outcome
Expected outcome
Tmp solution
Add the min and max of z to
vmin
andvmax
:However, it doesn't work if the vmin or vmax is beyond that:
Matplotlib version
The text was updated successfully, but these errors were encountered: