2016-10-11 3 views
2

Matplotlibにデータをプロットしようとしていましたが、重複するYTicksがあるようです。私はそれらを調整する方法がわかりません。私が望んでYTickがMatplotlibに重複しています

コード

import matplotlib.pyplot as plt 

data= [4270424, 4257372, 4100352, 4100356, 4100356] 

plt.figure(figsize=(10,5)) 

plt.plot(data, 'ko-') 
plt.ylabel('Data point') 
plt.xlabel('Iteration point') 
plt.yticks(data) 

plt.margins(0.05, 0.1) 
plt.show() 

enter image description here

は数字がそこにいることであるが、それはデータポイント間のスペースを大きくすることができますか?

+1

ただ3つのy-ティックを設定しないのはなぜですか? 'plt.yticks([4270424、4257372、4100356])'データポイントを変更せずにデータポイント間のスペースを増やすことはできません。その差はログスケールにさえ表示されません。 –

+0

@VlasSokolov私は実際に数字を見たいと思う、これらのわずかな変更が重要です。 – Akshay

+0

@VlasSokolovに感謝します。データ自体を変更することはできますが、それは意味がありません。また、ログのような変換を使用することもできます。しかし、単純なログは、データの大きさと相対的な違いのために、このケースであなたを助けません。あなたは 'plt.semilogy(data-np.min(data)+1、 'ko - ')'を実行することができますが、あなたはその解釈を混乱させ、他の点は束ねられます。数値に焦点を当てているのであれば、プロットに加えてテーブルを使うべきでしょうか?または、関心のある個々の点に注釈を付けるか?通常、プロットを見るとき、あなたは何かの一般的な振る舞いを集めています。 – tsj

答えて

2

y軸に近いデータポイントが多数ある場合、重複します。それらのすべてを表示することは避けることができます。あまりにも近すぎるy-ティックの1つだけを表示することができます。しかし残りはプロット自体に表示されます(y軸ではありません)。そのような何かを使用することができます

import matplotlib.pyplot as plt 

data= [4270424, 4257372, 4100352, 4100356, 4100356] 

fig, ax = plt.subplots(figsize=(10,8)) 

#Collect only those ticks that are distant enough from each other 
#in order to get rid of ticks overlapping on y-axis: 
yticks = [min(data)]   
for i in sorted(data[0:]): 
    if i-yticks[-1] > 3500:  
    yticks.append(i)   
################################################################# 

plt.plot(data, 'ko-') 
plt.ylabel('Data point', fontsize=12) 
plt.xlabel('Iteration point', fontsize=12) 
plt.yticks(yticks) 

plt.margins(0.05, 0.1) 


#Showing y-ticks right on the plot 
offset = -1.45 
x = ax.get_xticks() 

for xp, yp in zip(x, data): 
    label = "%s" % yp 
    plt.text(xp-offset, yp+offset, label, fontsize=12, horizontalalignment='right', verticalalignment='bottom') 
################################# 

ax.grid() 
plt.show() 

出力: enter image description here

また、完全にy軸上yticksを表示オフに切り替えることができます。この場合、この行をplt.yticks(yticks)に変更してください:plt.yticks(yticks, visible=False) この場合、コードの一部を収集するティックは必要ありません。しかし、それを保持しておけば、必要に応じて後で表示をオンにすることができます。

+0

それは一つの方法です。だから、ポイント間の幅を広げる方法はありませんか? – Akshay

関連する問題