2016-09-29 15 views
0

軸の最後のティック位置の前後にある程度のスペースが必要です。私はちょうどaxis.set_xlim()を使用しますが、これは私の(カスタム)ロケータと干渉し、チックの生成を再実行します。私は、ロケータクラスのview_limits()メソッドを見つけて上書きしましたが、自動的に呼び出されるようではなく、手動で呼び出されたときに結果のプロットに影響を与えません。私はドキュメントとソースを検索しましたが、解決策は出ていませんでした。何か不足していますか?Matplotlibの軸のview_limits/rangeを設定する方法

大きな画像の場合は、ティックの前後にある程度のスペースを与え、MultipleLocatorのような「ベース」の倍数であるチックポイントを選択しますが、ティック数が超えると自動的にベースをスケールします指定された値。ロケータをサブクラス化せずにこれを達成する別の方法があるなら、私はすべての耳です:)。私はあなたの問題があり、完全に何を理解している場合、

import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.ticker import MaxNLocator 

class MyLocator(MaxNLocator): 
    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 

    def view_limits(self, dmin, dmax): 
     bins = self.bin_boundaries(dmin, dmax) 
     step = bins[1] - bins[0] 
     result = np.array([bins[0] - step, bins[-1] + step]) 
     print(result) 
     return result 

a = 10.0 
b = 99.0 

t = np.arange(a, b, 0.1) 
s = np.sin(0.1*np.pi*t)*np.exp(-t*0.01) 

loc = MyLocator(9) 

fig, ax = plt.subplots() 
plt.plot(t, s) 

ax.xaxis.set_major_locator(loc) 
loc.autoscale() # results in [ 0. 110.] but doesnt change the plot 
plt.show() 

答えて

0

はわからないが、あなたが唯一の余分なスペースを追加したい場合は、以下のことができます。ここでは

は上書き view_limits -methodとサブクラスロケータのための私のコード例であります引き続きMaxNLocatorを使用して、手動でスペースをここに追加してください:

import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.ticker import MaxNLocator 

a = 10.0 
b = 99.0 

t = np.arange(a, b, 0.1) 
s = np.sin(0.1*np.pi*t)*np.exp(-t*0.01) 

loc = MaxNLocator(9) 

fig, ax = plt.subplots() 
plt.plot(t, s) 

ax.xaxis.set_major_locator(loc) 
ticks = ax.get_xticks() 
newticks = np.zeros(len(ticks)+2) 
newticks[0] = ticks[0]- (ticks[1]-ticks[0]) 
newticks[-1] = ticks[-1]+ (ticks[1]-ticks[0]) 
newticks[1:-1] = ticks 
ax.set_xticks(newticks) 

plt.show() 
+0

ありがとう!私はそれを使って作業することができます。 view_limitsメソッド全体が期待どおりに機能しないのはなぜか分かりません。 – Fookatchu

関連する問題