Matplotlib - 单值等高线图
我想制作一个数据的等高线图,但有可能所有的值都是一样的。这会导致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()
这样的话,如果有一个均匀的区域,你会得到一个填充的(默认是绿色)框;如果不是均匀的,就会得到一个带线的填充等高线图。