在matplotlib中具有2种不同步长的Contourplot

时间:2013-11-19 12:37:35

标签: python matplotlib contour

这个问题可能是一个非常简单的解决方案,但我找不到它。我想绘制一个contourf图,其中我的数据的一部分按顺序1的步长变化,另一部分随着顺序100的步骤变化。 现在我试着给出这样的轮廓水平:

contour_levels = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 200, 300, 400]

然而,这导致结果是第11个级别都具有与matplotlib相同的颜色,以某种方式将其标准化为最大值。我怎样才能使每个级别在我的色彩图方面同等重要?

非常感谢HYRY,你的答案解决了我的问题。这是情节和实施后的情况(我调整了一些水平;来自GOZCARDS团队/ NASA的数据): Water vapor time series bevore Water vapor time series after

2 个答案:

答案 0 :(得分:7)

使用colors参数:

import pylab as pl
import numpy as np

x, y = np.mgrid[-1:1:100j, 0:1:100j]

z = ... # your function

contour_levels = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 200, 300, 400]

cmap = pl.cm.BuPu
colors = cmap(np.linspace(0, 1, len(contour_levels)))
pl.contour(x, y, z, levels=contour_levels, colors=colors)

答案 1 :(得分:3)

我对HYRY的解决方案有点警惕,因为颜色级别之间的映射可能变得随意。我建议使用LogNorm代替映射您的值 - >颜色为log

import pylab as pl
import numpy as np

x, y = np.mgrid[-1:1:100j, 0:1:100j]

z = ... # your function

contour_levels = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 200, 300, 400]

cmap = pl.cm.BuPu
pl.contourf(x, y, z, levels=contour_levels, norm=matplotlib.colors.LogNorm)

如果您还使用vminvmax,则可以明确控制规范化的限制,并确保颜色比例在图表之间匹配,与您使用的levels无关。