嗨,我有一组数据,我需要在三维绘图
为此,我使用了matplotlibs plot_surface,因为我的一些数据值很大,而大部分值很小。
i、 e最大峰值为0.7,下一个最大峰值为0.15。
所以我需要使用某种非线性颜色映射,否则小细节会完全模糊。在
所以我尝试了以下非线性颜色映射创建source:class nlcmap(object):
def __init__(self, cmap, levels):
self.cmap = cmap #original colourmap
self.N = cmap.N
self.levels = numpy.asarray(levels, dtype='float64')
self._x = self.levels
self.levmax = self.levels.max()
self._y = numpy.linspace(0.0, self.levmax, len(self.levels))
def __call__(self, xi, alpha=1.0, **kw):
yi = numpy.interp(xi, self._x, self._y)
return self.cmap(yi / self.levmax, alpha)
要为三维轮廓图创建自定义颜色图:
^{pr2}$
但我得到了一个错误:
raise ValueError(“无法识别Colormap%s”%name)
值错误:Colormap<;main无法识别0x06E81AF0>;处的nlcmap对象。“
好吧,这个定制的颜色映射不能被识别,但是我真的不想改变matplotlib代码来强迫它接受这个colormap。在
有没有其他方法可以获得曲面图的非线性颜色映射?在
编辑:
使用标准化和预先存在的颜色图解决了我最初的问题,
但我只剩下一个三维等高线图,只有很少的离散层次。
创建自定义颜色映射或使用预先存在的颜色映射会给我带来一个级别的离散化问题。
我可以使用标准化:matplotlib.colors.Normalize(vmin=numpy.amin(Z), vmax=0.05)
在使用灰色颜色贴图时,强制将非常大的数据值转换为白色。
然后剩下的数据点只使用6个离散化级别着色,这时我至少需要~20个数据才能清晰。在
有什么方法可以改变三维等高线图的离散化程度吗?在