2011-07-09 11 views
1

y(y)プロットと時間(y)プロットの日付を設定する必要があり、y軸のスマートな書式設定が必要です。データは「0:00:02.994000」(0時間、0分、2秒、994000マイクロ秒)の形式です。matplotlib:素敵でダイナミックな書式のプロット期間

データの範囲はわずか数秒から12時間を超えることがありますが、一般的にのプロットではのデータポイントは同じ単位(秒、分、または時間)になります)。

問題は、異なる単位にある異常値があることがあります。たとえば、ほとんどの期間が1〜3時間以内であるプロットがありますが、今度は5分、さらには30秒のデータポイントがあります。または、データポイントがほとんどの場合は数分で、もう1つは数時間または数秒で時折長くまたは短くなる場合があります。

y軸をフォーマットするための良い(動的な)方法を選びたいと考えています。

1)のデータポイントのうち、どれがにあるのかを調べるためにデータを分析し、それをy軸単位として使用する必要がありますか?つまり、ほとんどの時間が分の場合、y軸は分単位で指定する必要があります。大部分が時間単位である場合、y軸は時間などでなければなりません。この方法では、表示されるデータのタイプに最も適しています。

2)(ポイント#1のために)プロットのy単位が分単位で与えられているにもかかわらず、ユーザーがわずか数秒のデータポイントでズームしたい場合は、フォーマッタがyスケーリングを秒単位で変更するのが好きです。私は、「0.0335」分、「2秒」というようにy軸に明示的な持続時間を持たせたくありません。

これにアプローチする方法についてのご意見はありがたいです。 ありがとう、 Che

+1

対数y軸はどうですか? – codeape

+0

範囲を計算し、ズームを使ってy軸を再フォーマットする可能性もあります。私はあなたを探してここに投稿しますが、対数プロットもあなたに役立つはずです! – ahelm

答えて

0

ylimに基づいてyデータにmucksするイベントハンドラを登録できます。

fig = plt.figure() 
ax = fig.add_subplot(111) 
ylim = ax.get_ylim() 
scale = get_scale(ylim) 
def tweak_y(event): 
    new_ylim = ax.get_ylim() 
    if new_ylim == ylim: 
     return 
    ylim = new_ylim 
    if get_scale(ylim) != scale: 
     # tweak ydata and replot 
     pass 

cid = fig.canvas.mpl_connect('draw_event', tweak_y) 
0

私はこれを行う方法は、書式設定datetime.timedelta文字列を使用することで、あなたはこのようなフォーマッタを作成することができます。

これはスケールします、 ax.xaxis.set_major_formatter(formatter)を使用して軸に適用することができ
def timeTicks(x, pos): 
    d = datetime.timedelta(seconds=x) 
    return str(d) 
formatter = matplotlib.ticker.FuncFormatter(timeTicks) 

ユーザーがズームするとこれは大多数の問題に対処するのではなく、同様の状況の他の人には役立つかもしれないことに注意してください。