前の画面〕 〔クリックポイント〕 〔最新の一覧〕 〔全て読んだことにする〕〔全て読んだことにして終了〕 〔終了

1099 re(3):日付、時間を取り扱うときにx, y軸に違う書式を使うには
2005/11/12(土)18:01 - 竹の - nolm01.iee.niit.ac.jp - 7792 hit(s)

引用する
現在のパスワード


gnuplot-4.0 だと、timecolumn() が使えないので面倒そうですが、Unix
なら以下のような逃げはあります。

[1] 最初の日付だけ timefmt で取得し、後半は sed でスペース区切りの
2 つのデータに分けて利用する

set xdata time
set timefmt "%Y-%m-%d"
set format x "%d"
# y 軸の見出しは自前
set yrange [460:680]
set ytics ( "08:00" 480, "09:00" 540, "10:00" 600, "11:00" 660 )
plot "< sed 's/:/ /' test01.dat" using 1:($2*60+$3) w l

[2] いっそ、timefmt を利用せず全部自前にする

set yrange [460:680]
set ytics ( "08:00" 480, "09:00" 540, "10:00" 600, "11:00" 660 )
set xtics ( 11, 12, 13, 14, 15 )
plot "test01.dat" using 3:($4*60+$5) "%lf-%lf-%lf %lf:%lf" w l

ただ、[2] は月が変わると色々厄介です。なお、timefmt と using の
format 指定は共存できず (help using 参照)、入力形式は 1 種類しか指
定できません。

だから、[1] のように前処理を使うなら、いっそ次のような手もあります。

[3] awk で前処理させて、日付と時刻のデータに分けて読み込ませる

set xdata time
set timefmt "%Y-%m-%d %H:%M"
set format x "%d"
set ydata time
set format y "%H:%M"
set datafile separator ','
plot "< awk '{print $1,\"0:0,2000-01-01\",$2}' test01.dat" using 1:2 w l

これは plot 内部の awk の前処理部分で

2005-11-11 0:0,2000-01-01 09:00

のようなデータに変換して、gnuplot に読み込まさせています。

ちなみに、CVS 版 gnuplot-4.1 だと、よりスマートな解決策がとれます。

[4] CVS 版 gnuplot-4.1 の timecolumn() で gnuplot 内部表現に変換し
それを利用する

set xdata time
set timefmt "%Y-%m-%d %H:%M"
set format x "%d"
set ydata time
set format y "%H:%M"
f1(x) = (floor(timecolumn(x))%(24*60*60))
f2(x) = (floor(timecolumn(x))-f1(x))
plot "test01.dat" using (f2(1)):(f1(1))

[2],[4] はもちろん Unix 以外でも可です。


〔ツリー構成〕

【1096】 日付、時間を取り扱うときにx, y軸に違う書式を使うには 2005/11/11(金)09:23 ringo (590)
┣【1097】 re(1):日付、時間を取り扱うときにx, y軸に違う書式を使うには 2005/11/11(金)20:27 竹の (287)
┣【1098】 re(2):日付、時間を取り扱うときにx, y軸に違う書式を使うには 2005/11/12(土)16:18 ringo (182)
┣【1099】 re(3):日付、時間を取り扱うときにx, y軸に違う書式を使うには 2005/11/12(土)18:01 竹の (1671)
┣【1102】 re(4):日付、時間を取り扱うときにx, y軸に違う書式を使うには 2005/11/17(木)00:47 ringo (360)

前の画面〕 〔クリックポイント〕 〔最新の一覧〕 〔全て読んだことにする〕〔全て読んだことにして終了〕 〔終了

※ 『クリックポイント』とは一覧上から読み始めた地点を指し、ツリー上の記事を巡回しても、その位置に戻ることができます.