2

同じページに複数の変数の複数の等高線図を作成する必要があります。これは 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');
4

1 に答える 1

12

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])も役に立つかもしれません。

于 2013-05-10T07:38:00.413 に答える