带有任意整数标签的填充轮廓图

时间:2018-02-01 15:51:31

标签: python matplotlib plot

我有一个点网格 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() 

这会产生以下输出:

enter image description here

左边的情节一切都如预期。但是,对于右边的情节不是。这里,网格包含两个标签0和4.因此,应该只有两种颜色,蓝色和红色。但是,contourf还为其间的所有标签绘制轮廓线,即1,2和3。

我该如何解决这个问题?理想情况下,右侧的绘图应该与左侧的绘图完全一致(颜色除外)。

enter image description here

0 个答案:

没有答案