matplotlibプロットの左上隅にテキストを置く


112

どのようにすれば、matplotlibの図の左上(または右上)の隅にテキストを配置できますか。たとえば、それがplt.scatter()の場合は、スキャッターの2乗内にあるものを左上隅に配置します。

データセットからデータセットに変わるので、たとえば、プロットされている散布図のスケールを理想的に知らなくても、これを実行したいと思います。テキストを大体左上、または大体右上にしたいだけです。凡例タイプの配置では、散布図のポイントと重ならないようにします。

ありがとう!


テキストをボックスに入れたい場合は、stackoverflow.com
questions / 20842613 /…

1
これはこの質問の複製だと思います。ここで提供されている種類の回答(textおよびを使用ax.transAxes)はそれらには含まれていませんが、重複した質問の答えははるかに優れています。
ImportanceOfBeingErnest

回答:


162

使用できますtext

text(x, y, s, fontsize=12)

text 座標は軸に対して相対的に指定できるため、テキストの位置はプロットのサイズとは無関係になります。

デフォルトの変換では、テキストがデータ座標内にあることが指定されていますが、軸座標内にテキストを指定することもできます(0,0は左下、1,1は右上)。以下の例は、軸の中央にテキストを配置します::

text(0.5, 0.5,'matplotlib',
     horizontalalignment='center',
     verticalalignment='center',
     transform = ax.transAxes)

テキストがスキャッターの任意のポイントを妨害するのを防ぐことは、より難しいアファイクです。より簡単な方法は、y_axis(のymax ylim((ymin,ymax)))を、ポイントの最大y座標よりも少し高い値に設定することです。このようにして、常にテキスト用にこの空きスペースができます。

編集:ここに例があります:

In [17]: from pylab import figure, text, scatter, show
In [18]: f = figure()
In [19]: ax = f.add_subplot(111)
In [20]: scatter([3,5,2,6,8],[5,3,2,1,5])
Out[20]: <matplotlib.collections.CircleCollection object at 0x0000000007439A90>
In [21]: text(0.1, 0.9,'matplotlib', ha='center', va='center', transform=ax.transAxes)
Out[21]: <matplotlib.text.Text object at 0x0000000007415B38>
In [22]:

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

haおよびvaパラメータは、挿入ポイントを基準にしたテキストの配置を設定します。すなわち。ha = 'left'は、フレームを手動で縮小(狭く)したときに長いテキストが左軸から外れるのを防ぐための適切なセットです。


センタリングはできますが、どうすれば左上にできますか?「horizo​​ntalalignment」を「left」に設定し、verticalalignmentをtopに設定してみましたが、機能しません

1
示されているように、x、yの値でプレイする必要があります(0,0は左下、1,1は右上です)。編集を参照してください
ホアキン

2
@ user3645626インポートは次のとおりです。from pylab import figure, text, scatter, show 答えのコードは、明示的なインポートが必要ないpylabモードのipythonコンソールで実行されました。クリーンな環境では、上記をインポートしshow()てプロットを表示する必要があります
joaquin

5

1つの解決策はplt.legend、実際の凡例が必要ない場合でも、関数を使用することです。locキータームを使用して、凡例ボックスの配置を指定できます。詳細はこのWebサイトにありますが、凡例を配置する方法を示す例も含めました。

ax.scatter(xa,ya, marker='o', s=20, c="lightgreen", alpha=0.9)
ax.scatter(xb,yb, marker='o', s=20, c="dodgerblue", alpha=0.9)
ax.scatter(xc,yc marker='o', s=20, c="firebrick", alpha=1.0)
ax.scatter(xd,xd,xd, marker='o', s=20, c="goldenrod", alpha=0.9)
line1 = Line2D(range(10), range(10), marker='o', color="goldenrod")
line2 = Line2D(range(10), range(10), marker='o',color="firebrick")
line3 = Line2D(range(10), range(10), marker='o',color="lightgreen")
line4 = Line2D(range(10), range(10), marker='o',color="dodgerblue")
plt.legend((line1,line2,line3, line4),('line1','line2', 'line3', 'line4'),numpoints=1, loc=2) 

ためloc=2、凡例はプロットの左上隅にあります。また、テキストがプロットと重なっている場合は、を使用してテキストを小さくできます。これによりlegend.fontsize、凡例が小さくなります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.