matplotlib:防止一些非常大(或小)的值影响我的轮廓

时间:2013-07-05 17:32:52

标签: matplotlib contour matplotlib-basemap

在某些情况下绘制数据有一些非常大(或非常小)的数字,如果不加以注意,将会以不好的方式影响轮廓。一个解决方案是从轮廓颜色分级中取出10%最高和最低数据,并将它们视为小于和大于。下图显示了这个想法: enter image description here

条形顶部和底部的两个箭头形状支持这个想法。高于14的任何值将以白色显示,低于-2的任何值将以黑色显示。怎么可能在matplotlib? 我该如何定义: - 将5%的最高值和5%的最低值分别显示在条形两端的三角形部分中的两个类别中? (我应该定义轮廓操作还是有其他方法?) - 如果我想提供某些值而不是百分比怎么办?例如,要求将白色三角形上的任何值高于14,将低于-2的任何值作为黑色区域?

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

取自http://matplotlib.org/examples/api/colorbar_only.html。你可以玩它,你会看到它是否可以解决你的问题。

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

x = np.linspace(-1,1,100)
X,Y = np.meshgrid(x,x)
Z = np.exp(-X**2-Y**2)

vmin = 0.3 #Lower value
vmax = 0.9 #Upper value

bounds = np.linspace(vmin,vmax,4)

cmap = mpl.colors.ListedColormap([(0,0,0),(0.5,0.5,0.5),(0,1,0),(1,1,1)])
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)

plt.imshow(Z,cmap=cmap,interpolation='nearest',vmin=vmin,vmax=vmax)

ax = plt.colorbar().ax
cb = mpl.colorbar.ColorbarBase(ax, norm=norm,
                               extend='both',
                               cmap=cmap)
cmap.set_over([0,0,1])
cmap.set_under([1,0,0])

plt.show()

enter image description here