81

さまざまなパラメータにさまざまな色が使用され、さまざまなアルゴリズムにさまざまな線のスタイルが使用されているプロットがあります。目標は、同様のパラメーターで実行されたさまざまなアルゴリズムの結果を比較することです。つまり、合計で4つの異なる色と3つの異なる線のスタイルを使用し、同じグラフに合計12のプロットを作成します。

私は実際に色に基づいて凡例を作成し、各色を対応するパラメーターに関連付けます。次に、同じグラフに2番目の凡例を、各線種の意味とともに表示したいと思います。それを達成することは可能ですか?どのように?

これが私のコードが実際にどのように見えるかです:

colors = ['b', 'r', 'g', 'c']
cc = cycle(c)
for p in parameters:

    d1 = algo1(p)
    d2 = algo2(p)
    d3 = algo3(p)

    pyplot.hold(True)
    c = next(cc)
    pyplot.plot(d1, '-', color=c, label="d1")
    pyplot.plot(d1, '--', color=c)
    pyplot.plot(d2, '.-', color=c)

pyplot.legend()
4

4 に答える 4

118

その正確な主題に関するmatplotlibドキュメントのセクションがあります

特定の例のコードは次のとおりです。

import itertools
from matplotlib import pyplot

colors = ['b', 'r', 'g', 'c']
cc = itertools.cycle(colors)
plot_lines = []
for p in parameters:

    d1 = algo1(p)
    d2 = algo2(p)
    d3 = algo3(p)

    pyplot.hold(True)
    c = next(cc)
    l1, = pyplot.plot(d1, '-', color=c)
    l2, = pyplot.plot(d2, '--', color=c)
    l3, = pyplot.plot(d3, '.-', color=c)

    plot_lines.append([l1, l2, l3])

legend1 = pyplot.legend(plot_lines[0], ["algo1", "algo2", "algo3"], loc=1)
pyplot.legend([l[0] for l in plot_lines], parameters, loc=4)
pyplot.gca().add_artist(legend1)

その出力の例を次に示します。 パラメータごととアルゴリズムごとの2つの凡例を使用してプロットします

于 2012-10-06T17:25:29.393 に答える
22

これを行うためのより「実践的な」方法もあります(つまり、任意の図形軸と明示的に対話する)。

import itertools
from matplotlib import pyplot

fig, axes = plt.subplot(1,1)

colors = ['b', 'r', 'g', 'c']
cc = itertools.cycle(colors)
plot_lines = []
for p in parameters:

    d1 = algo1(p)
    d2 = algo2(p)
    d3 = algo3(p)

    c = next(cc)
    axes.plot(d1, '-', color=c)
    axes.plot(d2, '--', color=c)
    axes.plot(d3, '.-', color=c)

# In total 3x3 lines have been plotted
lines = axes.get_lines()
legend1 = pyplot.legend([lines[i] for i in [0,1,2]], ["algo1", "algo2", "algo3"], loc=1)
legend2 = pyplot.legend([lines[i] for i in [0,3,6]], parameters, loc=4)
axes.add_artist(legend1)
axes.add_artist(legend2)

私はこの書き方が好きです。なぜなら、それは潜在的に、より曖昧でない方法で異なる軸で遊ぶことを可能にするからです。最初に凡例のセットを作成してから、メソッド「add_artist」を使用してそれらを目的の軸に追加できます。また、私はmatplotlibから始めています。少なくとも、オブジェクトが明示されていると、スクリプトを理解しやすくなります。

注意:表示/保存中に凡例が途切れる可能性があるので注意してください。この問題を解決するには、メソッドaxes.set_position([left、bottom、width、length])を使用して、サブプロットを図のサイズに対して相対的に縮小し、凡例を表示します。

于 2017-06-22T13:44:08.653 に答える
9

ツインゴースト軸を使用するのはどうですか?

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()

colors = ['b', 'r', 'g', ]
styles = ['-', '--', '-.']

for cc, col in enumerate(colors):
    for ss, sty in enumerate(styles):
        print(cc, ss)
        ax.plot([0, 1], [cc, ss], c=colors[cc], ls=styles[ss])

for cc, col in enumerate(colors):
    ax.plot(np.NaN, np.NaN, c=colors[cc], label=col)

ax2 = ax.twinx()
for ss, sty in enumerate(styles):
    ax2.plot(np.NaN, np.NaN, ls=styles[ss],
             label='style ' + str(ss), c='black')
ax2.get_yaxis().set_visible(False)

ax.legend(loc=1)
ax2.legend(loc=3)

plt.show()

ここに画像の説明を入力してください

于 2020-09-24T10:50:09.073 に答える
1

使用することもできますline.get_label()

import matplotlib.pyplot as plt

plt.figure()

colors = ['b', 'r', 'g', 'c']
parameters = [1,2,3,4]
for p in parameters:

  color = colors[parameters.index(p)]
  plt.plot([1,10],[1,p], '-', c=color, label='auto label '+str(p))

lines = plt.gca().get_lines()
include = [0,1]
legend1 = plt.legend([lines[i] for i in include],[lines[i].get_label() for i in include], loc=1)
legend2 = plt.legend([lines[i] for i in [2,3]],['manual label 3','manual label 4'], loc=4)
plt.gca().add_artist(legend1)
plt.show()

自動および手動ラベル

于 2020-07-01T11:53:15.433 に答える