年齢(年齢に似た時間)を検索して、本当に迷惑な(一見基本的な)問題に対する答えを見つけました。答えにぴったりの質問が見つからないため、質問を投稿し、それを期待して答えていますヌービープロットスキルに費やした膨大な時間を他の誰かに節約できます。
python matplotlibを使用してプロットポイントにラベルを付ける場合
from matplotlib import pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
A = anyarray
B = anyotherarray
plt.plot(A,B)
for i,j in Zip(A,B):
ax.annotate('%s)' %j, xy=(i,j), xytext=(30,0), textcoords='offset points')
ax.annotate('(%s,' %i, xy=(i,j))
plt.grid()
plt.show()
Xytext =(30,0)がtextcoordsに沿っていることを知っています。これらの30,0の値を使用してデータラベルポイントを配置します。
Iとjをプロットする両方の線が必要です。それ以外の場合は、xまたはyデータラベルのみをプロットします。
次のようになります(ラベルのみに注意してください)。
理想的ではありませんが、まだいくつかの重複があります-しかし、私が持っていたものは何もないよりはましです。
(x, y)
を一度に印刷するのはどうですか。
from matplotlib import pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
A = -0.75, -0.25, 0, 0.25, 0.5, 0.75, 1.0
B = 0.73, 0.97, 1.0, 0.97, 0.88, 0.73, 0.54
plt.plot(A,B)
for xy in Zip(A, B): # <--
ax.annotate('(%s, %s)' % xy, xy=xy, textcoords='data') # <--
plt.grid()
plt.show()
私は同様の問題があり、これで終わった:
私には、データと注釈が重複しないという利点があります。
from matplotlib import pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111)
A = -0.75, -0.25, 0, 0.25, 0.5, 0.75, 1.0
B = 0.73, 0.97, 1.0, 0.97, 0.88, 0.73, 0.54
plt.plot(A,B)
# annotations at the side (ordered by B values)
x0,x1=ax.get_xlim()
y0,y1=ax.get_ylim()
for ii, ind in enumerate(np.argsort(B)):
x = A[ind]
y = B[ind]
xPos = x1 + .02 * (x1 - x0)
yPos = y0 + ii * (y1 - y0)/(len(B) - 1)
ax.annotate('',#label,
xy=(x, y), xycoords='data',
xytext=(xPos, yPos), textcoords='data',
arrowprops=dict(
connectionstyle="arc3,rad=0.",
shrinkA=0, shrinkB=10,
arrowstyle= '-|>', ls= '-', linewidth=2
),
va='bottom', ha='left', zorder=19
)
ax.text(xPos + .01 * (x1 - x0), yPos,
'({:.2f}, {:.2f})'.format(x,y),
transform=ax.transData, va='center')
plt.grid()
plt.show()
.annotate
でテキスト引数を使用すると、好ましくないテキスト位置になりました。凡例の位置を特定するのは難しいため、凡例とデータポイントの間に線を引くのは面倒です。