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

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

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

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

Python

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

Q&A

解決済

1回答

4933閲覧

Matplotlibのグラフ表示で、日付の表示形式、Y軸の桁数を変更したい

YOSHITAKEH

総合スコア21

Matplotlib

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

Python

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

0グッド

1クリップ

投稿2018/11/07 10:05

編集2018/11/07 10:58

初心者で質問の作法に不備があるかもしれませんので適宜ご指摘くださいませ。

実現したいこと

Matplotlibにて、時系列の棒グラフを作成中に2つの課題にぶつかりました。

  1. ある数量(Y軸)の軸の単位を変更したい。(問題点1)

現在オフセット表記?されているようで、元数値が300,000,000に対して1.00のように表示されてしまいます。希望としては、百万単位に変更し、軸には300と表示したいです。(グラフ内に(百万単位)のように記載があればなお嬉しい)

  1. 時系列(X軸)を、YY/MM/DDではなくMM/DDで表示したい。(問題点2)

現在は、2018-10-1です。表示したいのは、10-1だけです。

以下、実際に出力されたグラフをキャプチャしました。

画像で説明

環境

Matplotlib、Python3.7、JupyterNotebook、Macbookpro13を利用しています。

発生している問題・エラーメッセージ

  1. Y軸の表記

現在オフセット表記?されているようで、元数値が300,000,000に対して1.00のように表示されてしまいます。希望としては、百万単位に変更し、軸には300と表示したいです。(グラフ内に(百万単位)のように記載があればなお嬉しい)

  1. X軸の表記

現在は、2018-10-1です。表示したいのは、10-1だけです。

該当のソースコード

Python

1%matplotlib inline 2import matplotlib.pyplot as plt 3import numpy as np 4 5plt.figure(figsize=(8,6),dpi=100) 6plt.bar(df.index,df['aaa'],color='magenta') 7plt.title('GMS推移') 8plt.savefig('test.png') 9plt.show() 10

知りたいこと

  1. Y軸表記について
plt.gca().xaxis.get_major_formatter().set_useOffset(False)

なお、こちらのコードでオフセット表記をオフにできると聞いたのですが、書き方が違うのか空白のグラフが1つ追加されてしまいました。。桁数などを指定する方法のアドバイスをいただけませんでしょうか。

2.X軸表記について

データフレームのINDEXのフォーマットを変更することで解決できるのかもしれませんが、matplotlibの表示形式を指定できる方法があれば、ぜひ教えて頂きたいです。


大変お手数ですが、アドバイスをいただければ幸いです。
他に不足情報がございましたら、教えてください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

これでどうでしょうか

Python

1%matplotlib inline 2import matplotlib.pyplot as plt 3import matplotlib.dates as mdates 4import numpy as np 5 6plt.figure(figsize=(8,6),dpi=100) 7plt.bar(df.index,df['aaa'],color='magenta') 8plt.title('GMS推移') 9# X軸のフォーマットを設定 10plt.gca().xaxis.set_major_formatter(mdates.DateFormatter("%m-%d")) 11# Y軸のフォーマットを設定 12plt.gca().ticklabel_format(style='plain', axis='y') 13plt.savefig('test.png') 14plt.show()

投稿2018/11/07 11:01

magichan

総合スコア15898

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

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

magichan

2018/11/07 11:07

あっ、Y軸の仕様間違えました。直します。
YOSHITAKEH

2018/11/07 11:15

ご回答ありがとうございます。 # Y軸のフォーマットを設定 plt.gca().ticklabel_format(style='plain', axis='y') は、望み通りの結果になりました。ありがとうございます。 ただ、 # X軸のフォーマットを設定 plt.gca().xaxis.set_major_formatter(mdates.DateFormatter("%m-%d")) NameError: name 'mdates' is not defined となってしまいます。。
magichan

2018/11/07 11:16

申し訳ありません import matplotlib.dates as mdates 追加でおねがいします
YOSHITAKEH

2018/11/07 11:16

早速のご回答ありがとうございます! 全て解決できました!大変助かりました。
magichan

2018/11/07 11:27

あとY軸ですが 100万単位の場合 import matplotlib.ticker as ticker plt.gca().yaxis.set_major_formatter(ticker.FuncFormatter(lambda d,pos: int(d/1000000))) のように書くこともできます(単位は書けませんが)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問