質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

1回答

2858閲覧

pandas に{"時系列":件数}のデータを渡し、グラフを描画したい。

musuka

総合スコア10

DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

1クリップ

投稿2018/12/01 19:28

編集2022/01/12 10:55

時系列と件数のデータがあり、
x軸を時系列
y軸を件数
とした縦棒グラフや面積グラフ?を書きたいのですが、
横軸に時間が表示されません。
可能なら、1時間ごとで出したいのですが、可能でしょうか。

to_datetime等を使用しても、
正しく使用できてないようで、エラーになりました。

python3

1# 時間(00:00-23:59)と件数の入った辞書 2data = { 3 '00:00': 34, 4 '00:01': 1, 5 '00:05': 1, 6 '01:00': 211, 7 '01:02': 1, 8 '01:05': 2, 9 '01:10': 1, 10 '01:14': 1, 11 '01:30': 5, 12 '02:00': 61, 13 '02:05': 1, 14 '02:10': 1, 15 '02:30': 2, 16 '03:00': 80, 17... 18} 19def draw_graph(data): 20 df = pd.DataFrame(list(data.items()), columns=['Time', 'Num']) 21 #print(type(df)) 22 #print(df) 23 df.plot(kind='area', stacked=True, alpha=0.4) 24 plt.show() 25 plt.savefig("image.png") 26 27```![イメージ説明](2d871fc946db197d80cbb61da76ebd7a.png) 28 29-============================================ 30↓↓↓追記(2018_1203_0159)↓↓↓ 31-============================================ 32```python3 33df.plot(ax=ax, kind="area", alpha=0.4, x=key, y=['num']) # x軸にkeyを指定 34loc = mdates.HourLocator() # Auto, Year, Month, Day, Date, Hour, Minute 35fmt = mdates.DateFormatter("%Y-%m-%d %H:%M") #時刻のフォーマットを指定 36ax.xaxis.set_major_locator(loc) 37ax.xaxis.set_major_formatter(fmt)

項目名がゴチャゴチャしているグラフ↓
ゴチャゴチャしたグラフ

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

pandas.to_datetimeTime列を日時型に変換しax.xaxis.set_major_locatorax.xaxis.set_major_formatterで刻み幅と表示フォーマットを指定することで以下のように描画できます。
参考:時系列データのプロット

Python

1import pandas as pd 2import matplotlib.pyplot as plt 3import matplotlib.dates as mdates 4 5data = { 6 '00:00': 34, 7 '00:01': 1, 8 '00:05': 1, 9 '01:00': 211, 10 '01:02': 1, 11 '01:05': 2, 12 '01:10': 1, 13 '01:14': 1, 14 '01:30': 5, 15 '02:00': 61, 16 '02:05': 1, 17 '02:10': 1, 18 '02:30': 2, 19 '03:00': 80 20} 21 22df = pd.DataFrame({'Time':[k for k,v in data.items()],'Num':[v for k,v in data.items()]}) 23df['Time'] = pd.to_datetime(df['Time']) # 日時に変換 24 25fig = plt.figure() 26ax = fig.add_subplot(111) 27df.plot(ax=ax,kind='area',stacked=True,alpha=0.4,x='Time') # x軸はTime列 28 29ax.xaxis.set_major_locator(mdates.HourLocator()) # 1時間毎 30ax.xaxis.set_major_formatter(mdates.DateFormatter("%H:%M")) # 時:分 31plt.savefig('image.png') 32plt.show()

イメージ説明

投稿2018/12/02 01:23

can110

総合スコア38233

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

musuka

2018/12/02 16:57

回答ありがとうございます! > ax.xaxis.set_major_locator > ax.xaxis.set_major_formatter ①HH:MMの表記にしたいのですが、 全時間が00:00になってしまいました。 resample?を使えばできる気がしたのですが、 df = df.resample('D', loffset='12H').mean() # ??? こちらも使い方がイマイチ分からずでした... ②set_major_formatterの mdates.HourLocatorにbyhour=[0,1]という引数を与えなかったら、 RuntimeError: Locator attempting to generate 1058 ticks from 737018.9166666666 to 737062.9583333334: exceeds Locator.MAXTICKS というエラーが発生するのと関係あるのでしょうか。 ③24時間を1時間ごとなら、綺麗になりそうですが、 720~744時間を1時間ごとなら、 項目数が多くゴチャゴチャしてしまいます。 前提からして、綺麗になりようがないと言えばそうなのでしょうか、 綺麗に描画するコツとかってあるんでしょうか。
can110

2018/12/02 17:09

①については私の回答コードを実行すると全時間が00:00になるということでしょうか?であればmatplotlibバージョンの違いなどが考えられます。私の環境では「2.2.2」です。 ②の「mdates.HourLocatorにbyhour=[0,1]という引数」ですが、その引数は私のコードには表れておらず、把握していないので何ともいえません。 ③についてですが、すみません、「720~744時間を1時間ごとなら」の部分をはじめ、ご質問の内容が把握できませんので回答できません。 なお、前の質問も踏まえ思ったのは、完成イメージが固まらないまま実装しておられるため?か 疑問点が多く、また、やや混乱しているため、質問内容も複雑になっていると感じます。 なので単純なデータで完成イメージを手で描いてみて、それを実現するコードを段階的に作りこんでいくとよいのかなと思います。 いずれも回答になっておらずすみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問