web-dev-qa-db-ja.com

matplotlib凡例のマーカーを通る行を削除

次のコードで生成されたmatplotlibプロットがあります。

import matplotlib.pyplot as pyplot

Fig, ax = pyplot.subplots()
for i, (mark, color) in enumerate(Zip(
    ['s', 'o', 'D', 'v'], ['r', 'g', 'b', 'purple'])):
    ax.plot(i+1, i+1, color=color,
            marker=mark,
            markerfacecolor='None',
            markeredgecolor=color,
            label=i)

ax.set_xlim(0,5)
ax.set_ylim(0,5)
ax.legend()

これを生成された図として: matplotlib generated figure

凡例のマーカーを通る線が好きではありません。どうすればそれらを取り除くことができますか?

27
jlconlin

Plotコマンドのキーワード引数としてlinestyle="None"を指定できます。

import matplotlib.pyplot as pyplot

Fig, ax = pyplot.subplots()
for i, (mark, color) in enumerate(Zip(
    ['s', 'o', 'D', 'v'], ['r', 'g', 'b', 'purple'])):
    ax.plot(i+1, i+1, color=color,
            marker=mark,
            markerfacecolor='None',
            markeredgecolor=color,
            linestyle = 'None',
            label=`i`)

ax.set_xlim(0,5)
ax.set_ylim(0,5)
ax.legend(numpoints=1)
pyplot.show()

enter image description here

単一のポイントのみをプロットしているため、凡例以外ではline属性を見ることができません。

40
tom10

プロットに rcparams を設定できます。

import matplotlib
matplotlib.rcParams['legend.handlelength'] = 0
matplotlib.rcParams['legend.numpoints'] = 1

enter image description here

設定をすべてのプロットにグローバルに適用したくない場合は、すべてのlegend。*パラメーターをキーワードとして使用できます。 matplotlib.pyplot.legend のドキュメントとこの関連する質問を参照してください。

matplotlibの凡例設定(numpointsおよびscatterpoints)は機能しません

7
Hooked

データがプロットされたら、単に線を削除するには:

handles, labels = ax.get_legend_handles_labels()
for h in handles: h.set_linestyle("")
ax.legend(handles, labels)
4
blalterman

ここで散布図を使用する必要があります

import matplotlib.pyplot as pyplot

Fig, ax = pyplot.subplots()
for i, (mark, color) in enumerate(Zip(
    ['s', 'o', 'D', 'v'], ['r', 'g', 'b', 'purple'])):
    ax.scatter(i+1, i+1, color=color,
            marker=mark,
            facecolors='none',
            label=i)

ax.set_xlim(0,5)
ax.set_ylim(0,5)
ax.legend(scatterpoints=1)

pyplot.show()
2
M4rtini