2017-07-13 6 views
1

私はラインと散布図の両方を持つ凡例を作成しようとしています。以下は私が得ているものです。 enter image description hereMatplotlibでスキャターとラインの両方で凡例を作成しようとしています

私が望むのは、モデルテキストの上に(好ましくは)凡例に表示される行です。可能であれば、すべてXです。以下は私が作業しているコードです。

import matplotlib.pyplot as plt 
import matplotlib.patches as mpatches 

fig = plt.figure() 

accuracy_line = plt.plot([1, 2, 3], [31,32,35], linewidth=2.0, 
label='Accuracy') 
oov_line = plt.plot([1, 2, 3], [38,35,31], linewidth=2.0, label="OOV") 
plt.axis([0.5, 3.5, 30, 40]) 
plt.xlabel('label', fontsize=14, color='Black') 
plt.title("title") 
plt.setp(accuracy_line, 'color', 'g', 'linewidth', 2.0) 
plt.setp(oov_line, 'color', 'r', 'linewidth', 2.0) 
no_lm = plt.scatter(1, 31, marker='x', s=100, linewidth=4.0, color='k') 
add_corp = plt.scatter(2, 32, marker='x', s=100, linewidth=4.0, color='b') 
syn_data = plt.scatter(3, 35, marker='x', s=100, linewidth=4.0, color='c') 

plt.legend([accuracy_line, oov_line, no_lm, add_corp, syn_data], ['Accuracy', 'OOVs', 'Model 1', 'Model 2', 'Model 3']) 
plt.show() 

私はここで見つけた他のいくつかのことを試しましたが、それを出すことはできません。

答えて

1

凡例に複数のXが付いている問題は奇妙です。それは私にとってはmatplotlib 2.0.0とPython 3.5.1を使用していることを示していません。

legendラインを変更することによって、あなたは自分のプロットの最初のインデックスにアクセスする必要がある行の凡例を取得するには:伝説に登場するいくつかのscatterpointsの問題がある

plt.legend([accuracy_line[0], oov_line[0], no_lm, add_corp, syn_data], ['Accuracy', 'OOVs', 'Model 1', 'Model 2', 'Model 3']) 

+1

古いバージョンのmatplotlibが原因です。新しいバージョンではデフォルトで1つのポイントしか使用されません。 [この質問](https://stackoverflow.com/questions/6099799/how-to-create-a-scatter-plot-legend-with-only-one-symbol-for-each-label)を設定する方法を示しています凡例の数。 – ImportanceOfBeingErnest