我有一个点网格 z 。每个点都有一个相关的标签。标签范围为[0.0,4.0]。
我想对 z 中出现的每个标签进行一次轮廓线绘制。
import matplotlib.pyplot as plt
from matplotlib import colors
import numpy as np
cmap = colors.ListedColormap([
'red', 'orange', 'yellow', 'green', 'royalblue'
])
x = np.linspace(-1.0, 1.0, num=50)
xx, yy = np.meshgrid(x, x)
z1 = np.ones(shape=xx.shape)
z1 = np.tril(z1)
levels1 = np.arange(z1.min(), z1.max() + 2) - 0.5
z2 = np.ones(shape=xx.shape) + 3
z2 = np.tril(z2)
levels2 = np.arange(z2.min(), z2.max() + 2) - 0.5
print('Labels (left): ', np.unique(z1))
print('Labels (right): ', np.unique(z2))
fig, axes = plt.subplots(nrows=1, ncols=2)
im1 = axes[0].contourf(xx, yy, z1, levels=levels1, cmap=cmap)
im2 = axes[1].contourf(xx, yy, z2, levels=levels2, cmap=cmap)
# c = axes.contour(xx, yy, z, colors='k', levels=levels, linwidths=.1)
fig.colorbar(im1, ax=axes[0], ticks=np.arange(0, 5))
fig.colorbar(im2, ax=axes[1], ticks=np.arange(0, 5))
plt.show()
这会产生以下输出:
左边的情节一切都如预期。但是,对于右边的情节不是。这里,网格包含两个标签0和4.因此,应该只有两种颜色,蓝色和红色。但是,contourf还为其间的所有标签绘制轮廓线,即1,2和3。
我该如何解决这个问题?理想情况下,右侧的绘图应该与左侧的绘图完全一致(颜色除外)。