pyplot.contourf 中的不等间隔水平

unequal interval level in pyplot.contourf

我用plt.contourf画图,想用不同间距的level:

import numpy as np
import matplotlib.pyplot as plt
data = np.random.rand(10,10)*70-32 # I want my data between +/-70
levels = [-32, -16,-8, -4, -2, 0, 2, 4, 8, 16, 32]
im = plt.contourf(data, levels)
im.set_cmap('Set1')
plt.colorbar()
plt.contour(data, levels=[0], colors='black')

黑色轮廓为0值线,待检查 我们可以发现 contourf 中的零值丢失了。 有人知道 contourf 发生了什么吗?

或者对于水平间距不同的这个问题有什么建议吗?

非常感谢

问题是 "Set1" 只有 9 种颜色。因此,如果您有更多级别,则某些级别具有相同的颜色。您可以选择具有更多离散颜色的颜色图,并使用您拥有的级别指定 BoundaryNorm

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors

data = np.random.rand(10,10)*70-32 
levels = [-32, -16,-8, -4, -2, 0, 2, 4, 8, 16, 32]
norm = matplotlib.colors.BoundaryNorm(levels,len(levels))
im = plt.contourf(data, levels, cmap="tab20c", norm=norm)

plt.colorbar(ticks=levels)
plt.contour(data, levels=[0], colors='black')
plt.show()

或者您采用具有更多连续级别的色图,其余部分保持不变。

import numpy as np
import matplotlib.pyplot as plt

data = np.random.rand(10,10)*70-32 
levels = [-32, -16,-8, -4, -2, 0, 2, 4, 8, 16, 32]

im = plt.contourf(data, levels, cmap="magma")

plt.colorbar(ticks=levels)
plt.contour(data, levels=[0], colors='black')
plt.show()