2017-06-12 9 views
1

私は、以下のコードを使用してxを印刷すると、タイムスタンプごとに1900、1、1、10、29、34の形式でhh:mm:ssという書式で書かれています。 。年、月、日をどのように取り除くことができますか? hh:mm:ssの形式で時間を持たせたいので、Pythonでdatetimeを使用

編集:コメントの助けを借りて今すぐ見えるようにコード全体が更新されました。

import matplotlib.pyplot as plt 
import matplotlib.ticker 
import time 
import datetime 

x = ['10:29:55', '10:34:44']   
sy1 = [679.162, 679.802] 

x_labels = [datetime.datetime.strptime(elem, '%H:%M:%S') for elem in x] 
formatter = matplotlib.ticker. FixedFormatter(x_labels) 
plt.gca().xaxis.set_major_formatter(formatter) 
plt.gca().xaxis.set_minor_formatter(formatter) 

plt.plot(x_labels, sy1, 'ro') 
plt.xlabel('Time') 
plt.ylabel('Position') 
plt.show() 

明らかに、年月日も考慮した時刻を表示します。記述子 'のstrftime' 'datetime.date' オブジェクトが必要ですが、 'str' は

+0

したがって、datetimesの解析やプロットの問題はありますか?それらの2つのものを分けて、それらを独立して扱います。 – deceze

+0

'plt.plot(x、y)'を試してください。 xとyはすでにリストであり、この場合matplotlibは2dリストを必要としません。 – vroomfondel

+0

あなたの編集により、画像への参照が取り除かれました。 matplotlibを使ってプロットしようとしていますか?おそらくhttps://matplotlib.org/api/figure_api.html#matplotlib.figure.Figure.autofmt_xdateが必要です。あなたが使用しているプロットライブラリを編集することができれば、答えたい人がいるかもしれません。 –

答えて

0

[OK]を受け取った:私はのstrptimeのstrftimeの代わりに使用している場合

Plotting (wrong) time against y values

私は例外TypeErrorが得ます。あなたが望むものを得るにはいくつかの方法があります。

あなたはマイクロ秒を持つために解決するために喜んでいる場合、あなたはあなたが必要なものには本当に近いはずである。

import matplotlib.pyplot as plt 
import datetime 

time_strings = ['10:29:55', '10:34:44']   
sy1 = [679.162, 679.802] 

times = [datetime.datetime.strptime(elem, '%H:%M:%S') for elem in time_strings] 
plt.plot(times, sy1, 'ro') 
plt.xlabel('Time') 
plt.ylabel('Position') 
plt.show() 

これはただの書式ではマイクロ秒で、あなたはプロットにしたい時刻を表示する必要があります。マイクロ秒はすべて醜いですが、唯一の変更はわかりやすいものでした。私はimport timeまたはimport matplotlib.tickerではありませんでした。より正確な変数名にxを変更し、あなたが行ったようにdatetimesを作成しました。マイクロ秒を取り除くには、物事は醜いものになります。 2つの値しか設定していないので、FixedFormatterを使用することはできません。標準プロットには2ティック以上の値があります。 FuncFormatterを動作させる方法を見つける必要があります。これは必要に応じて動作しますが、まだノイズが多いので、plt.gcf().autofmt_xdate()にも追加しています。

import matplotlib.pyplot as plt 
import matplotlib.ticker 
import datetime 
import pylab 

time_strings = ['10:29:55', '10:34:44']   
sy1 = [679.162, 679.802] 

times = [datetime.datetime.strptime(elem, '%H:%M:%S') for elem in time_strings] 
plt.plot(times, sy1, 'ro') 
formatter = matplotlib.ticker.FuncFormatter(lambda tick_value, _: datetime.datetime.strftime(pylab.num2date(tick_value), '%H:%M:%S')) 
plt.gca().xaxis.set_major_formatter(formatter) 
plt.gca().xaxis.set_minor_formatter(formatter) 
plt.xlabel('Time') 
plt.ylabel('Position') 
plt.gcf().autofmt_xdate() 
plt.show() 

FuncFormatterを定義する行が乱雑です。私はラムダを定義します。ラムダは、1行に定義された関数です。 FuncFormatterは2つの引数を取ることを期待しています。最初のものはtick_valueで、2番目のものは本当に気にしないので、気にしないことを示すために標準変数名_を付けました。ティック値は、日付時刻またはタイムスタンプです。ティック値から日時に到達する方法は、pylab.num2dateを呼び出すことです。

この2番目のソリューションは、必要なものだけであることがわかります。あなたがしなければならなかった重要なことは、あなたの変数型が何であったか、そしてどこでどのような変数型が必要であったかを追跡することでした。

+0

ありがとうございます。あなたはplt.gca()を意味しますか?残念ながら、私はxの値が1900-01-01 10:29:34のように出てくるプロットを取得するので、それらの年/月/日付スタンプを取り除く必要があります。私はあなたの最後のコードを借りて、私は完全に私の古いものを変更したくない:) – Ofinns

+0

私は全体のコードで更新され、私は最初の投稿(ちょうど今)で書いたように、私はstrftimeを使用するとTypeError 。申し訳ありませんが、私は真剣にこの初心者です。 – Ofinns

+0

すべてのコードを追加していただきありがとうございます。 :-)将来、これを最初からやってください。あなたが今私たちに言ったことを反映するために私の答えを書き直します。 –