2013-03-06 26 views
13

私はmatplotlibでプロットしているX値とY値の単純なデータセットを持っています。データの独立変数は、入力データ内で常に秒数の整数で表される期間/時間(例:60秒、2時間、24時間、10日)です。私の質問は、matplotlibは持続可能な軸のラベルを人間が読める形式でインテリジェントに設定する方法があるのですか?matplotlib timedeltaのインテリジェントな軸ラベル

たとえば、スケールの小端では、30秒を単に「30秒」と表示することが望ましいでしょう。規模の大部分では、864000秒ではなく、「10日」を表示するほうがよかったでしょう。その間のどこかで、「分」と「時間」でラベルを読み取る方がよいでしょう。 matplotlibには、数桁の期間にわたり人間が読みやすいものを推論する自動化された方法がありますか?

私が使用するアプローチは、1つの入力データセットに個別に調整されたプロットではなく、異なる継続時間スケールにまたがるデータセットに一般化するのが理想的です。

答えて

12

例を挙げてください。これは、あなたが望むものである:

import datetime                                                                 

import numpy as np                                                                
import pylab as plt                                                                
import matplotlib                                                                

fig = plt.figure()                                                                
ax = fig.add_subplot(111)                                                              

x = np.linspace(0, 300) # 5 minutes                                                              
y = np.random.random(len(x))                                                             

ax.plot(x, y)                                                                 

def timeTicks(x, pos):                                                               
    d = datetime.timedelta(seconds=x)                                                           
    return str(d)                                                                
formatter = matplotlib.ticker.FuncFormatter(timeTicks)                                                       
ax.xaxis.set_major_formatter(formatter)                                                           

plt.show() 

Example output

それはニシキヘビのはtimedeltaを使用しています。 864000秒を指定すると、「10日、10:00:00」になります。もちろん、上記のtimeTicks()関数にさらに高度な書式設定を組み込むことができます。

+0

さらに、xticksを毎分表示するように変更したい場合は、 'ax.xaxis.set_major_locator(plt.MultipleLocator(1 * 60))' –

関連する問題