Skip to main content
 首页 » 编程设计

python之Matplotlib:多个等高线变量等高线图的多个图例

2025年05月04日13tuyile006

我需要在同一页面上绘制多个变量的多个等高线图。我可以用 MATLAB 做到这一点(请参阅下面的 MATLAB 代码)。我无法让 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'); 

请您参考如下方法:

如果您展示了您想要的 Matlab 输出,将会有所帮助。例如,您真的想要多个图例吗?或者您实际上是指 1 个包含多个项目的图例?

由于等高线图(可以)对每个级别都有不同的样式,因此您想要如何在图例中绘制它并不明显。但为了让您开始,您可以通过检查 CS.collections 数组来访问每一行。

例如:

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) 

结果:

也许像 plt.legend(CS2.legend_elements()[0], CS2.legend_elements()[1]) 这样的东西也对你有用。