プログラミング初心者です。いつもお世話になっております。
グラフ(時系列ベクトル図)の作成についての続きです。
再度ご質問したくよろしくお願い致します。
#モジュールのインポート import pandas as pd import numpy as np import matplotlib.pyplot as plt #csvの読み込み df = pd.read_csv('ocean_current2.csv',encoding='ANSI',parse_dates=[0]) a = df['current'] b = df['orient'] #ベクトルの成分計算 u = a*np.sin(b) v = a*np.cos(b) #ベクトルの起点 time_len = len(df['datetime']) x = np.arange(time_len) y = np.zeros(len(x)) #X軸のラベル dt_labels = [dt.strftime('%m:%d') for dt in df['datetime']] fig, ax = plt.subplots(1,1,figsize=(10, 5)) ax.axhline(color='black', linewidth=1) ax.set_xticklabels(dt_labels, rotation=0, fontsize='small') #ベクトル表示 q = ax.quiver(x, y, u, v,width=0.002,headlength=0, headwidth=0, headaxislength=0) #y軸のラベル plt.yticks(np.arange(-50.0,50.0,10)) #y=0にラインを表示 ax.axhline(color='black', linewidth=1) #ベクトルのキー表示 ax.quiverkey(q, 0.1, 0.9, 30,'? cm/s', labelpos='N', coordinates='axes') #軸にラベルを表記 ax.set_xlabel('datetime') ax.set_ylabel('current(cm/s)') plt.show()
皆様のおかげで、描きたい物に近づけることができました。
しかし、まだ完成には至っておりません。
①まず、軸の目盛と各線の長さが対応していません。
以下にデータフレームを示します。
10分毎にcurrent(速度cm/s)とorient(向き、北を0度として時計回り)を計測しています。
datetime current orient
0 2018-05-29 20:00:00 19.3 46.2
1 2018-05-29 20:10:00 20.2 46.7
2 2018-05-29 20:20:00 21.7 47.4
3 2018-05-29 20:30:00 23.7 47.3
4 2018-05-29 20:40:00 25.3 45.7
5 2018-05-29 20:50:00 26.9 45.7
.. ... ... ...
140 2018-05-30 19:20:00 33.7 78.8
141 2018-05-30 19:30:00 34.3 76.5
142 2018-05-30 19:40:00 33.3 76.7
143 2018-05-30 19:50:00 30.1 74.4
144 2018-05-30 20:00:00 31.4 75.0
currentの数値が最大値で40近くあるのですが、線分の長さがY軸の目盛の幅と大きく乖離しています。
これを対応させるにはどうしたらよろしいでしょうか?
②ベクトルのキーを左上に挿入したのですが、これを実際の線分の長さに対応した基準バーにするには
どういう方法があるのでしょうか?今は適当に長さ30と入れておりますが…
③X軸の表示もいささかおかしいものになっています。'%m:%d'で月日指定にしているのですが、
05:29と時刻表記のようになっており、また、途中で日付が5/30に変わるのですが、反映されている
様子がありません。どうしてなのでしょうか?
自分の理解が追い付いておらず、ご迷惑をおかけしております。
どなたか、ご教授頂ければ幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/19 08:35
2018/10/19 08:49
2018/10/19 09:09
2018/10/19 09:16
2018/10/19 09:21