2017-10-28 6 views
0

私はすでにサイトを検索していますが、私の場合に特有のものは見つかりませんでした。 私はいくつかのポイントのペアをプロットするコードを書いて、ポイントの各ペアの識別子番号を書きます。 問題は、識別番号がポイントに近すぎて、プロットをより読みやすくするために数字を少し移動したいということです。 これはコードです:matplotlib.pyplot.annotateで重複しています

import os 
import numpy as np 
from math import exp, log10 
import matplotlib.pyplot as plt 

#dataset 
dataset1=np.genfromtxt(fname='/path/to/file1.txt') 
dataset2=np.genfromtxt(fname='/path/to/file2.txt')  
source=np.genfromtxt(fname='/path/to/file3.txt') 
num=np.array(source[:,0]) 

x1=np.array(dataset1[:,5]) 
y1=np.array(dataset1[:,20]) 
x2=np.array(dataset2[:,1]) 
y2=np.array(dataset2[:,10]) 

# error bars 
xe1=np.array(dataset1[:,6]) 
ye1=np.array(dataset1[:,21])  
xe2l=np.array(dataset2[:,2]) 
xe2u=np.array(dataset2[:,3]) 
ye2l=np.array(dataset2[:,11]) 
ye2u=np.array(dataset2[:,12]) 


plt.errorbar(x1, y1, xerr=xe1, yerr=ye1, fmt='.', color='red', elinewidth=1, capsize=2, label='wavdetect') 
plt.errorbar(x2, y2, xerr=[xe2l, xe2u], yerr=[ye2l, ye2u], fmt='.', color='blue', elinewidth=1, capsize=2, label='my_results') 

for i,j in enumerate(num): 
    plt.annotate(j, xy=(x2[i],y2[i]), ha='left', va='bottom') 

plt.xlabel('x') 
plt.ylabel('y') 
plt.title ('title') 
plt.legend(loc='upper right') 

plt.show() 

プロット: enter image description here

答えて

1

あなたは自分の注釈にいくつかの空白を追加しないのはなぜ?これを行うには、数字だけでなく、実際にannotateに書式設定された文字列を与える必要があります。それで、あなたはパッドしたいスペースと改行の数だけで遊んでいます。

データなし私はいくつかのことをしなければなりませんでした。うまくいけば十分に近いです。

import numpy as np 
import matplotlib.pyplot as plt 

# Made up data 
x = np.array([ 312, 485, 100, 600, 200]) 
y = np.array([ .6, .2, .1, 1.2, 1.3 ]) 
xerr = x.max()/20 
yerr = y.max()/10 

plt.errorbar(x,y,xerr=xerr,yerr=yerr,fmt='.', color='red', elinewidth=1, capsize=2) 

for i,j in enumerate(num): 
    # Create a formatted string with three spaces, one newline 
    ann = ' {}\n'.format(j) 
    plt.annotate(ann, xy=(x[i],y[i])) 

enter image description here

あなたはpython2を実行している場合、あなたはann = ' %.1f\n'%(j)のような文字列をフォーマットする必要がありますので注意してください。

+0

ありがとうございました!今それは完全に動作します! –

関連する問題