这个问题可能是一个非常简单的解决方案,但我找不到它。我想绘制一个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的数据):
答案 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)
如果您还使用vmin
和vmax
,则可以明确控制规范化的限制,并确保颜色比例在图表之间匹配,与您使用的levels
无关。