Sha*_*ang 8 python plot matplotlib
我正在用matplotlib创建一个二维等高线图.使用http://matplotlib.org/examples/pylab_examples/contour_demo.html提供的文档,可以创建这样的等高线图
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')
Run Code Online (Sandbox Code Playgroud)
输出以下图表.

该文档详细说明了如何在现有绘图上手动标记某些轮廓(或"线").我的问题是如何创建比所示更多的轮廓线.
例如,显示的图有两个双变量高斯.右上方有三个轮廓线,在0.5,1.0和1.5.
我怎么能在说0.75和1.25?处添加轮廓线?
此外,我应该能够放大并(原则上)从(例如)1.0和(例如)添加几十个等高线1.5.怎么做到这一点?
要在指定的水平值绘制等值线,设置的levels参数:
levels = np.arange(-1.0,1.5,0.25)
CS = plt.contour(X, Y, Z, levels=levels)
Run Code Online (Sandbox Code Playgroud)
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()
levels = np.arange(-1.0,1.5,0.25)
CS = plt.contour(X, Y, Z, levels=levels)
plt.clabel(CS, inline=1, fontsize=10)
plt.title('levels = {}'.format(levels.tolist()))
plt.show()
Run Code Online (Sandbox Code Playgroud)

这里的第六个数字使用此方法绘制等值线levels = np.arange(-1.2, 1.6, 0.2).
要放大,请设置所需区域的x限制和y限制:
plt.xlim(0, 3)
plt.ylim(0, 2)
Run Code Online (Sandbox Code Playgroud)
并且,例如,绘制24个自动选择的级别,使用
CS = plt.contour(X, Y, Z, 24)
Run Code Online (Sandbox Code Playgroud)
例如,
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()
Run Code Online (Sandbox Code Playgroud)

这里的第三个数字使用这种方法绘制6个等值线.
| 归档时间: |
|
| 查看次数: |
10860 次 |
| 最近记录: |