25

xおよびyエラーのある一連のデータポイントをプロットしていますが、エラーバーを凡例に含めたくありません(マーカーのみ)。そうする方法はありますか?

凡例のエラーバーを回避する方法は?

例:

import matplotlib.pyplot as plt
import numpy as np
subs=['one','two','three']
x=[1,2,3]
y=[1,2,3]
yerr=[2,3,1]
xerr=[0.5,1,1]
fig,(ax1)=plt.subplots(1,1)
for i in np.arange(len(x)):
    ax1.errorbar(x[i],y[i],yerr=yerr[i],xerr=xerr[i],label=subs[i],ecolor='black',marker='o',ls='')
ax1.legend(loc='upper left', numpoints=1)
fig.savefig('test.pdf', bbox_inches=0)
4

4 に答える 4

28

凡例ハンドラーを変更できます。matplotlibの凡例ガイドを参照してください。あなたの例を適応させると、これは次のようになります。

import matplotlib.pyplot as plt
import numpy as np

subs=['one','two','three']
x=[1,2,3]
y=[1,2,3]
yerr=[2,3,1]
xerr=[0.5,1,1]
fig,(ax1)=plt.subplots(1,1)

for i in np.arange(len(x)):
    ax1.errorbar(x[i],y[i],yerr=yerr[i],xerr=xerr[i],label=subs[i],ecolor='black',marker='o',ls='')

# get handles
handles, labels = ax1.get_legend_handles_labels()
# remove the errorbars
handles = [h[0] for h in handles]
# use them in the legend
ax1.legend(handles, labels, loc='upper left',numpoints=1)


plt.show()

これにより、

出力画像

于 2013-03-21T15:41:51.433 に答える
4

これが醜いパッチです:

pp = []
colors = ['r', 'b', 'g']
for i, (y, yerr) in enumerate(zip(ys, yerrs)):
    p = plt.plot(x, y, '-', color='%s' % colors[i])
    pp.append(p[0])
    plt.errorbar(x, y, yerr, color='%s' % colors[i])  
plt.legend(pp, labels, numpoints=1)

たとえば、次の図を示します。

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

于 2013-01-18T21:49:44.190 に答える
1

受け入れられたソリューションは単純なケースで機能しますが、一般的には機能しません。特に、私自身のより複雑な状況では機能しませんでした。

私は、より堅牢なソリューションを見つけました。これは、をテストしErrorbarContainer、私にとってはうまくいきました。それはスチュアートWDグリーブによって提案されました、そして私は完全を期すためにそれをここにコピーします

import matplotlib.pyplot as plt
from matplotlib import container

label = ['one', 'two', 'three']
color = ['red', 'blue', 'green']
x = [1, 2, 3]
y = [1, 2, 3]
yerr = [2, 3, 1]
xerr = [0.5, 1, 1]

fig, (ax1) = plt.subplots(1, 1)

for i in range(len(x)):
    ax1.errorbar(x[i], y[i], yerr=yerr[i], xerr=xerr[i], label=label[i], color=color[i], ecolor='black', marker='o', ls='')

handles, labels = ax1.get_legend_handles_labels()
handles = [h[0] if isinstance(h, container.ErrorbarContainer) else h for h in handles]

ax1.legend(handles, labels)

plt.show()

次のプロットを生成します(Matplotlib 3.1で)

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

于 2020-01-23T11:22:03.377 に答える
-2

label引数をNoneタイプに設定すると、うまくいきます。

plt.errorbar(x, y, yerr, label=None)
于 2019-05-17T22:31:43.100 に答える