Matplotlib - 具有单值的等高线图

Sco*_*t B 5 python matplotlib contour colorbar

我想制作一些数据的等高线图,但是字段中的所有值都可能具有相同的值.这会导致matplotlib出错,这是有道理的,因为实际上没有要创建的轮廓.例如,如果您运行下面的代码,您将收到错误,但删除第二个定义zi并按预期运行.

如果是一个统一的场,我如何为某些数据制作"轮廓"图?我希望它看起来就像常规轮廓图(要有一个装满颜色的盒子并在侧面显示颜色条.颜色条可以是均匀的颜色,或者仍然显示15种颜色的范围,我不要不在乎.

码:

from numpy        import array
import matplotlib.pyplot as plt

xi = array([0., 0.5, 1.0])
yi = array([0., 0.5, 1.0])
zi = array([[0., 1.0, 2.0],
            [0., 1.0, 2.0],
            [0., 1.0, 2.0]])
zi = array([[1.0, 1.0, 1.0],
            [1.0, 1.0, 1.0],
            [1.0, 1.0, 1.0]])

CS = plt.contour(xi, yi, zi, 15, linewidths=0.5, colors='k')
CS = plt.contourf(xi, yi, zi, 15, cmap=plt.cm.jet)
plt.colorbar()
plt.show()
Run Code Online (Sandbox Code Playgroud)

Joe*_*ton 10

好吧,contourf完美地处理它,这contour就是窒息.

为什么不这样做:

import numpy as np
import matplotlib.pyplot as plt

xi = np.array([0., 0.5, 1.0])
yi = np.array([0., 0.5, 1.0])
zi = np.ones((3,3))

try:
    CS = plt.contour(xi, yi, zi, 15, linewidths=0.5, colors='k')
except ValueError:
    pass
CS = plt.contourf(xi, yi, zi, 15, cmap=plt.cm.jet)

plt.colorbar()
plt.show()
Run Code Online (Sandbox Code Playgroud)

这样,如果存在均匀字段,则将获得填充(默认为绿色)框,否则将填充带有线的填充轮廓图.

在此输入图像描述