簡體   English   中英

使用matplotlib 2D輪廓繪圖添加額外的輪廓線

[英]Adding extra contour lines using matplotlib 2D contour plotting

我正在用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')

輸出以下圖表。 在此輸入圖像描述

該文檔詳細說明了如何在現有繪圖上手動標記某些輪廓(或“線”)。 我的問題是如何創建比所示更多的輪廓線。

例如,顯示的圖有兩個雙變量高斯。 右上角有三條輪廓線,分別0.5 1.01.5

如何在0.751.25處添加輪廓線?

此外,我應該能夠放大並(原則上)從(例如) 1.01.5添加幾十個等高線。 怎么做到這一點?

要以指定的級別值繪制等值線,請設置levels參數

levels = np.arange(-1.0,1.5,0.25)
CS = plt.contour(X, Y, Z, levels=levels)

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

在此輸入圖像描述

這里的第六個數字使用此方法繪制levels = 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個等值線。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM