2013-05-09 1 views
1

같은 페이지에 여러 변수의 윤곽 플롯을 여러 개 만들 필요가 있습니다. MATLAB을 사용하여이 작업을 수행 할 수 있습니다 (MATLAB 코드는 아래 참조). matplotlib에 여러 개의 전설을 표시 할 수 없습니다. 어떤 도움이라도 대단히 감사 할 것입니다.Matplotlib : 여러 등고선 변수에 대한 등고선 플롯의 다중 범례

파이썬 코드 :

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에에서 원하는 출력을 보여 주었다 경우가 도움이 될 것이다. 예를 들어, 정말로 여러 개의 전설이 필요합니까? 아니면 muliple 항목으로 실제로 하나의 전설을 의미합니까?

등고선 플롯 (캔)은 각 레벨마다 다른 스타일을 가지므로 범례에서 어떻게 그릴 것인지 분명하지 않습니다. 하지만 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

+0

@RutgerKassies,이 질문을 보시겠습니까? http://stackoverflow.com/questions/24830954/contour-plot-legent-matplotlib 그 것과 비슷하지만 네가 음수와 양수 모두를 가지고 있다고 보장 할 수는 없습니다. 고맙습니다. – pceccon