Python 使用matplotlib二维等高线打印添加额外等高线

Python 使用matplotlib二维等高线打印添加额外等高线,python,matplotlib,plot,Python,Matplotlib,Plot,我正在使用matplotlib创建二维等高线图。使用提供的文档,可以通过以下方式创建等高线图: import matplotlib import numpy as np import matplotlib.cm as cm import matplotlib.mlab as mlab import matplotlib.pyplot as plt delta = 0.025 x = np.arange(-3.0, 3.0, delta) y = np.arange(-2.0, 2.0, del

我正在使用matplotlib创建二维等高线图。使用提供的文档,可以通过以下方式创建等高线图:

import matplotlib
import numpy as np
import matplotlib.cm as cm
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt

delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
# difference of Gaussians
Z = 10.0 * (Z2 - Z1)

plt.figure()
CS = plt.contour(X, Y, Z)
plt.clabel(CS, inline=1, fontsize=10)
plt.title('Simplest default with labels')
这将输出以下绘图。

文档详细说明了如何在现有绘图上手动标记某些等高线(或“线”)。我的问题是如何创建比显示的轮廓线更多的轮廓线

例如,显示的图有两个二元高斯。右上角有三条等高线,分别位于
0.5
1.0
1.5

如何在例如
0.75
1.25
处添加等高线


此外,我应该能够放大并(原则上)添加几十条等高线(例如)
1.0
1.5
。如何做到这一点

要以指定的标高值绘制等值线,请设置:


使用此方法在
级别=np.arange(-1.2,1.6,0.2)
绘制等值线


要放大,请设置所需区域的
x
限制和
y
限制:

plt.xlim(0, 3)
plt.ylim(0, 2)
要绘制24个自动选择的级别,请使用

CS = plt.contour(X, Y, Z, 24)

比如说,

import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt

delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
# difference of Gaussians
Z = 10.0 * (Z2 - Z1)

plt.figure()
N = 24
CS = plt.contour(X, Y, Z, N)
plt.clabel(CS, inline=1, fontsize=10)
plt.title('{} levels'.format(N))
plt.xlim(0, 3)
plt.ylim(0, 2)
plt.show()


使用此方法绘制6条等值线。

是否有方法自动为所有等高线设置标签?如何做到这一点?看看例子。谢谢你的回答。我想我问的是一个更简单的问题:假设我希望
plt.show()
总是返回带有每个数字值的轮廓。有没有办法通过
plt.clabel(CS等)设置此行为
?给出的示例创建了一个“标签类”,以便通过特定格式的标签——我对给出的格式很满意。难道不是每个轮廓(等值线)都已经被标记了吗?如果您对格式满意,需要更改什么?不,默认情况下不需要更改。这让我很困惑。原始绘图可能有标签,但如果我放大某些区域(设置
x
限制和
y
限制),则没有标签。给出的例子并不能解决这个问题。也许我应该提出一个新问题。。。。
CS = plt.contour(X, Y, Z, 24)
import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt

delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
# difference of Gaussians
Z = 10.0 * (Z2 - Z1)

plt.figure()
N = 24
CS = plt.contour(X, Y, Z, N)
plt.clabel(CS, inline=1, fontsize=10)
plt.title('{} levels'.format(N))
plt.xlim(0, 3)
plt.ylim(0, 2)
plt.show()