2017-05-20 36 views
0

海で収集した速度/奥行きデータの時系列contourfプロットを作成しようとしています。生データは.mat形式であり、これをpandasデータフレームに読み込んで、x軸を除き、必要な場所に実際に近いものを生成することができました。それはMathWorks社のMATLABファイルであるため、与えられた時間値は、いくつか以来(すなわち736456(日参照番号です日付を使用してcontourfプロットのx軸目盛りラベル

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

time, depth = np.meshgrid(a2,b2) 
cont = ax.contourf(time, depth, c2, 50, cmap=plt.cm.get_cmap('viridis'),vmin=-1, vmax=1) 

ax.set_ylabel("Depth (m)",size=35) 
ax.set_xlabel("Time (date YYY/MM/DD)", size=35) 
ax.tick_params(labelsize=35) 
plt.gca().invert_yaxis() 
plt.title("ADCP North-South Velocity", size = 50) 

cbar = fig.colorbar(cont) 
cbar.set_label(label='Velocity (m/s)', size = 35) 
cbar.ax.tick_params(labelsize=35) 
mpl.rcParams['figure.figsize'] = 70,35 

plt.savefig('adcpV.png') 
plt.show() 

第一プロット

このコードは、このプロットを作成します参照日)は2016年5月6日です)、これを使ってPython datetimeオブジェクトに変換することができました:

def matlab2datetime(matlab_datenum): 
    day = dt.datetime.fromordinal(int(matlab_datenum)) - dt.timedelta(days = 366) 
    return day 
axisdate = [] 
for elem in a2: 
    axisdate.append(matlab2datetime(elem)) 
最初のプロットで

ax.set_xticklabels(axisdate) 

2プロット

、x軸の範囲:

Iは、コードの最初のブロックに次の行を追加した場合、それはこのプロットを生成します約1年ですが、変換した日付に変更すると、それぞれの目盛りに同じ日付が表示されます。参照番号はすべて正確に正しい日付に変換されましたが、同じ日付の複数のデータを含む約64,000のデータポイントがあります。軸のリストの最初の数千の要素は2016-05-06で、2017-04-19まで続きます。

最初の質問:x軸の正しい日付ラベルを取得するにはどうすればよいですか?

2番目の質問:どの日時オブジェクト(2016-05-06)のみが表示されるように、各日時オブジェクトから時間、分、秒(00:00:00)を削除するにはどうすればよいですか?

Float64Index([736456.208333, 736456.213542, 736456.21875, 736456.223958, 
       736456.229167, 736456.234375, 736456.239583, 736456.244792, 
        736456.25, 736456.255208, 
       ... 
       736804.703125, 736804.708333, 736804.713541, 736804.71875, 
       736804.723958, 736804.729166, 736804.734375, 736804.739583, 
       736804.744791,  736804.75], 
      dtype='float64', length=64142) 


    Int64Index([ 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30,  32, 34, 36, 
      38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 
      72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96], 
     dtype='int64') 


[[ 0.004 0.009 -0.012 ..., -0.072 -0.09 -0.098] 
[-0.022 0.013 -0.067 ..., -0.319 -0.293 -0.253] 
[-0.053 0.005 -0.017 ..., -0.335 -0.328 -0.343] 
..., 
[-0.065 0.059 0.05 ..., -0.036 0.018 0.009] 
[-0.041 -0.03 -0.035 ..., -0.027 -0.07 -0.046] 
[ 0.215 -0.287 0.033 ..., -0.049 0.002 -0.01 ]] 
+0

することができます。ここ

はそれぞれA2、B2、およびC2のデータの一部が、ありますa2、b2、c2を共有しますか? –

+0

スクリーンショットで十分でしょうか? – Christeanne

+0

あなたはそれらのためのいくつかの部分的なデータセットを提供することができます、そしてそれはより良いでしょう –

答えて

0

あなたはこのようなあなたの機能matlab2datetimeを変更、日時をフォーマットするdatetime.strftime(format)を使用することができます:

def matlab2datetime(matlab_datenum): 
    day = (dt.datetime.fromordinal(int(matlab_datenum)) - dt.timedelta(days = 366)).strftime("%Y-%m-%d") 
    return day 
axisdate = [] 
for elem in a2: 
    axisdate.append(matlab2datetime(elem)) 
+0

ええと、それはまだ同じことをしているようです。 – Christeanne

+0

ああ待って、これはフォーマットのために働いた、ありがとう!軸上の日付を修正する方法に関するアドバイスはありますか? – Christeanne

+0

あなたは私の実際のデータを共有できますか?私はこれを手助けしたい。 –

関連する問題