Matplotlib による散布図の凡例
特定の地域のさまざまな気温を表現するために、4D散布図グラフを作成しました。凡例を作成すると、凡例には正しいシンボルと色が表示されますが、それを通る線が追加されます。私が使用しているコードは以下の通りです:
colors=['b', 'c', 'y', 'm', 'r']
lo = plt.Line2D(range(10), range(10), marker='x', color=colors[0])
ll = plt.Line2D(range(10), range(10), marker='o', color=colors[0])
l = plt.Line2D(range(10), range(10), marker='o',color=colors[1])
a = plt.Line2D(range(10), range(10), marker='o',color=colors[2])
h = plt.Line2D(range(10), range(10), marker='o',color=colors[3])
hh = plt.Line2D(range(10), range(10), marker='o',color=colors[4])
ho = plt.Line2D(range(10), range(10), marker='x', color=colors[4])
plt.legend((lo,ll,l,a, h, hh, ho),('Low Outlier', 'LoLo','Lo', 'Average', 'Hi', 'HiHi', 'High Outlier'),numpoints=1, loc='lower left', ncol=3, fontsize=8)
Line2Dを
Scatterと
scatterに変更してみました。Scatter
はエラーを返し、scatter
はグラフを変更しエラーを返しました。
scatterで、
range(10)`をデータポイントを含むリストに変更しました。各リストには、x、y、zのいずれかの変数が含まれています。
lo = plt.scatter(xLOutlier, yLOutlier, zLOutlier, marker='x', color=colors[0])
ll = plt.scatter(xLoLo, yLoLo, zLoLo, marker='o', color=colors[0])
l = plt.scatter(xLo, yLo, zLo, marker='o',color=colors[1])
a = plt.scatter(xAverage, yAverage, zAverage, marker='o',color=colors[2])
h = plt.scatter(xHi, yHi, zHi, marker='o',color=colors[3])
hh = plt.scatter(xHiHi, yHiHi, zHiHi, marker='o',color=colors[4])
ho = plt.scatter(xHOutlier, yHOutlier, zHOutlier, marker='x', color=colors[4])
plt.legend((lo,ll,l,a, h, hh, ho),('Low Outlier', 'LoLo','Lo', 'Average', 'Hi', 'HiHi', 'High Outlier'),scatterpoints=1, loc='lower left', ncol=3, fontsize=8)
これを実行すると、凡例はもはや存在せず、隅に小さな白い箱があり、そこには何も入っていない状態になっています。
何かアドバイスはありますか?
50
4
2次元散布図
以下のサンプルコードのように、
matplotlib.pyplot
モジュールのscatter
メソッドを使えばうまくいくはずです(少なくともmatplotlib 1.2.1 と Python 2.7.5 では)。また、散布図を使用する場合は、凡例呼び出しでnumpoints=1
ではなくscatterpoints=1
を使用して、各凡例エントリに1点のみを持つようにします。以下のコードでは、同じ範囲を何度もプロットするのではなく、ランダムな値を使用し、すべてのプロットが見えるようにしました(つまり、互いに重ならないようにしました)。
3次元散布図
凡例は
Axes3D
インスタンスのscatter
メソッドが返すPatch3DCollection
をサポートしていないので、3D で散布図を描くには、plot
メソッドを使用します。markerstyleを指定するには、以下の例のように、メソッド呼び出しの位置引数としてこれを含めることができます。オプションとして、linestyle
とmarker
の両方のパラメータに引数を指定することもできます。ここでは、より簡単な方法を紹介します(出典:こちら):
そして、あなたはこれを手に入れる:
[ここに画像の説明を入力]222[!
伝説の物件はこちらをご覧ください。
matplotlibバージョン3.1.1以降を使用している場合は、次の操作を試すことができます。
。![結果2](https://i.stack.imgur.com/1uYot.png。)。
他の回答は少し複雑なようですが、scatter関数にパラメータ 'label'を追加すれば、それがプロットの凡例になるのでしょう。
以下、出力です。