Matplotlib - 单值等高线图

5 投票
1 回答
6565 浏览
提问于 2025-04-16 15:13

我想制作一个数据的等高线图,但有可能所有的值都是一样的。这会导致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()

1 个回答

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()

这样的话,如果有一个均匀的区域,你会得到一个填充的(默认是绿色)框;如果不是均匀的,就会得到一个带线的填充等高线图。

在这里输入图片描述

撰写回答