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

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

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

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

Matplotlib

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

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

10937閲覧

matplotlibで日付をx軸としたグラフのx軸に補助目盛を加えたい

mutarayu

総合スコア7

DateTime

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

Matplotlib

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

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2017/08/23 01:07

編集2017/08/23 01:08

###前提・実現したいこと
python 2.7で1時間ごとの雨量グラフを作成しています.
日付をx軸にした場合に補助目盛を2時間毎に描写したいと考えています.
よろしくお願いします.
###発生している問題・エラーメッセージ
xticksを用いて補助目盛を描写するとエラーが発生し,グラフの外側がすべて描写されなくなってしまいます.

TypeError: don't know how to convert scalar number to int

###該当のソースコード

Python

1# coding: utf-8 2 3import matplotlib.pyplot as plt 4import datetime 5import numpy as np 6 7StartDate=[2017,8,14,0,0,0]#年,月,日,時,分,秒 8EndDate=[2017,8,19,0,0,0]#年,月,日,時,分,秒 9MaxRainLevel=150 10MaxSumRainLevel=1000 11StartTime=float(0) 12EndTime=float(432000) 13TimeNo=60 14 15if __name__ == '__main__': 16 17 x=np.array([datetime.timedelta(seconds=time)for time in range(int(StartTime),int(EndTime)+int(TimeNo)*60,int(TimeNo)*60)]) 18 x += datetime.datetime(StartDate[0], StartDate[1], StartDate[2], StartDate[3], StartDate[4], StartDate[5]) 19 y = np.random.randint(1, 100, 121) 20 fig=plt.figure(figsize=(10,3)) 21 plt.title(u'***観測所', loc='left') 22 23 ax1 = fig.add_subplot(111) 24 ax1.bar(x,y,width=0.0415,align='center',alpha=.8,label='RainLavel') 25 plt.xticks(np.arange(datetime.datetime(StartDate[0], StartDate[1], StartDate[2], StartDate[3], StartDate[4], StartDate[5]),datetime.datetime(EndDate[0], EndDate[1], EndDate[2], EndDate[3], EndDate[4], EndDate[5]),datetime.timedelta(int(TimeNo)*240))) 26 27 ax1.set_xlim((datetime.datetime(StartDate[0], StartDate[1], StartDate[2], StartDate[3], StartDate[4], StartDate[5]),datetime.datetime(EndDate[0], EndDate[1], EndDate[2], EndDate[3], EndDate[4], EndDate[5]))) 28 ax1.set_ylim((0, MaxRainLevel)) 29 30 ax1legend.get_frame().set_edgecolor('black') 31 plt.show()

###試したこと
プログラム中のplt.xticksをコメントアウトすることでx軸が日付である正常なグラフが描写されますが,補助目盛は表示されません.

###補足情報(言語/FW/ツール等のバージョンなど)
ツールは全て最新のものと確認いたしました.

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

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

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

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

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

guest

回答1

0

ベストアンサー

xtics()の代わりに、X軸に時系列用のlocatorformatterを設定してください

https://matplotlib.org/api/dates_api.html

Python

1import matplotlib.pyplot as plt 2import matplotlib.dates as mdates 3import datetime 4import numpy as np 5 6StartDate = [2017,8,14,0,0,0] 7EndDate = [2017,8,19,0,0,0] 8MaxRainLevel = 150 9MaxSumRainLevel = 1000 10 11StartTime=float(0) 12EndTime=float(432000) 13TimeNo=60 14 15if __name__ == '__main__': 16 x = np.array([datetime.timedelta(seconds=time) for time in range(int(StartTime),int(EndTime)+int(TimeNo)*60,int(TimeNo)*60)]) 17 x += datetime.datetime(*StartDate) 18 y = np.random.randint(1, 100, 121) 19 20 fig=plt.figure(figsize=(10,3)) 21 plt.title(u'***観測所', loc='left') 22 23 ax1 = fig.add_subplot(111) 24 25 ax1.bar(x,y,width=0.0415,align='center',alpha=.8,label='RainLavel') 26 27 # 1日毎に目盛り(Major) 28 ax1.xaxis.set_major_locator(mdates.DayLocator()) 29 ax1.xaxis.set_major_formatter(mdates.DateFormatter('%Y/%m/%d')) 30 # 2時間毎に目盛り(Minor) 31 ax1.xaxis.set_minor_locator(mdates.HourLocator(interval=2)) 32 33 ax1.set_xlim((datetime.datetime(*StartDate),datetime.datetime(*EndDate))) 34 ax1.set_ylim((0, MaxRainLevel)) 35 36 ax1legend = ax1.legend(loc='upper right') 37 ax1legend.get_frame().set_edgecolor('black') 38 plt.show()

投稿2017/08/23 03:05

magichan

総合スコア15898

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

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

mutarayu

2017/08/23 04:14

わかりやすい説明ありがとうございました! 無事に日付の補助目盛を追加することができました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問