2013-05-09 42 views
1

我需要在同一頁面上創建多個等值線的多個變量。我可以用MATLAB來做到這一點(參見下面的MATLAB代碼)。我無法讓matplotlib顯示多個圖例。任何幫助將非常感激。Matplotlib:多個輪廓變量的等值線圖的多個圖例

Python代碼:

import numpy as np 
from matplotlib import cm as cm 
from matplotlib import pyplot as plt 

delta = 0.25 
x = np.arange(-3.0, 3.0, delta) 
y = np.arange(-2.0, 2.0, delta) 
X, Y = np.meshgrid(x, y) 
Z1 = X*np.exp(-X**2-Y**2) 
Z2 = Y*np.exp(-X**2-Y**2) 

plt.figure() 
CS = plt.contour(X, Y, Z1, colors='k') 
plt.clabel(CS, inline=1, fontsize=10) 
CS = plt.contour(X, Y, Z2, colors='r') 
plt.clabel(CS, inline=1, fontsize=10) 
plt.legend(['case 1', 'case 2']) 

plt.show() 

MATLAB代碼:

[X,Y] = meshgrid(-2:.2:2,-2:.2:3); 
Z1 = X.*exp(-X.^2-Y.^2); 
Z2 = Y.*exp(-X.^2-Y.^2); 

[C,h] = contour(X,Y,Z1, 'color', 'k'); 
set(h,'ShowText','on','TextStep',get(h,'LevelStep')*2); 
hold on 

[C,h] = contour(X,Y,Z2, 'color', 'r'); 
set(h,'ShowText','on','TextStep',get(h,'LevelStep')*2); 

fn = {'case 1', 'case 2'}; 

legend(fn,'Location','NorthWest'); 

回答

9

這將幫助,如果你表現出從MATLAB所需輸出。例如,你真的想要多個傳說嗎?或者你真的意味着1個傳說與多個項目?

由於等高線圖(可以)對每個關卡都有不同的樣式,因此您不希望如何在圖例中進行繪製。但爲了讓你開始,你可以通過檢查CS.collections數組來訪問每一行。

因此,例如:

enter image description here

也許類似plt.legend(CS2.legend_elements()[0], CS2.legend_elements()[1]),也可以對您有用:在

delta = 0.25 
x = np.arange(-3.0, 3.0, delta) 
y = np.arange(-2.0, 2.0, delta) 
X, Y = np.meshgrid(x, y) 
Z1 = X*np.exp(-X**2-Y**2) 
Z2 = Y*np.exp(-X**2-Y**2) 

fig, ax = plt.subplots() 

CS1 = ax.contour(X, Y, Z1, colors='k') 
ax.clabel(CS1, inline=1, fontsize=10) 

CS2 = ax.contour(X, Y, Z2, colors='r') 
ax.clabel(CS2, inline=1, fontsize=10) 

lines = [ CS1.collections[0], CS1.collections[-1], CS2.collections[0], CS2.collections[-1]] 
labels = ['CS1_neg','CS1_pos','CS2_neg','CS2_pos'] 

plt.legend(lines, labels) 

結果。

+0

Rutger,非常感謝。這正是我所期待的。 – James 2013-05-10 20:06:35

+0

@RutgerKassies,你介意看看我的這個問題嗎? http://stackoverflow.com/questions/24830954/contour-plot-legent-matplotlib它類似於那個,但我不能保證你有負面和正面的水平。謝謝。 – pceccon 2014-07-18 18:22:03