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

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

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

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

Q&A

解決済

1回答

23160閲覧

Python Matplotlibの目盛りの整数表記の方法

Admiral

総合スコア1

Python

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

0グッド

1クリップ

投稿2021/04/14 13:08

編集2021/04/14 13:21

前提・実現したいこと

Python のMatplotlibで人口数を表す棒グラフを描画しましたところ、縦軸(y軸)の目盛りが指数表記になってしまいました。これを整数表記にし、1,000,000〜5,000,000まで1,000,000刻みになるようにしたいと思いますが、指数のまま変更されません。 どのようにコードを直せば良いか分からず困っております。宜しくお願いします。

イメージ説明

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

該当のソースコード

Python

1 2plt.figure(figsize=(20,4)) 3 4plt.subplot(1,2,1) 5plt.title('北海道の人口',fontsize=20) 6plt.xlabel('年',fontsize=15) 7plt.ylabel('人',fontsize=15) 8plt.bar(h_y, h_m, width=2, color='b', label='男') 9plt.bar(h_y, h_f, width=2, color='r', bottom=h_m, label='女') 10plt.legend() 11plt.grid(linestyle='--') 12 13plt.subplot(1,2,2) 14plt.title('東京の人口',fontsize=20) 15plt.xlabel('年',fontsize=15) 16plt.ylabel('人',fontsize=15) 17plt.bar(t_y, t_m, width=2, color='b', label='男') 18plt.bar(t_y, t_f, width=2, color='r', bottom=h_m,label='女') 19plt.legend() 20plt.grid(linestyle='--')

試したこと

plt.yticks(Start,End,Step)でy軸を整数になるよう、
1,000,000〜5,000,000まで1,000,000刻みで設定しようとしましたが、うまくいきませんでした。
結果:指数表記のままは変わらずでした。
イメージ説明

import numpy as np
plt.figure(figsize=(20,4))

plt.subplot(1,2,1)
plt.title('北海道の人口',fontsize=20)
plt.xlabel('年',fontsize=15)
plt.ylabel('人',fontsize=15)
plt.bar(h_y, h_m, width=2, color='b', label='男')
plt.bar(h_y, h_f, width=2, color='r', bottom=h_m, label='女')
plt.yticks(np.arange(1000000,5000000,1000000))
plt.ylim(1000000,5000000)
plt.legend()
plt.grid(linestyle='--')

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下を追加することで、指数表記から普通の表記になります。

python

1plt.figure(figsize=(20,4)) 2 3plt.subplot(1,2,1) 4plt.title('北海道の人口',fontsize=20) 5plt.xlabel('年',fontsize=15) 6plt.ylabel('人',fontsize=15) 7plt.bar(h_y, h_m, width=2, color='b', label='男') 8plt.bar(h_y, h_f, width=2, color='r', bottom=h_m, label='女') 9plt.legend() 10plt.grid(linestyle='--') 11# 対数表記から普通の表記に変換 12plt.ticklabel_format(style='plain',axis='y') 13 14plt.subplot(1,2,2) 15plt.title('東京の人口',fontsize=20) 16plt.xlabel('年',fontsize=15) 17plt.ylabel('人',fontsize=15) 18plt.bar(t_y, t_m, width=2, color='b', label='男') 19plt.bar(t_y, t_f, width=2, color='r', bottom=h_m,label='女') 20plt.legend() 21plt.grid(linestyle='--') 22# 指数表記から普通の表記に変換 23plt.ticklabel_format(style='plain',axis='y')

styleは以下のオプションがあるようです。

  • style='plain' :普通の表記
  • style='sci' :指数表記

投稿2021/04/15 01:25

編集2021/04/15 02:14
Akihiro_py

総合スコア55

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

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

bsdfan

2021/04/15 02:04

style='plain'で、という回答は正しいと思うのですが、ここで線形目盛、対数目盛という用語はふさわしくないかと。 (対数目盛って、1, 10, 100, 1000, 10000 みたいなログスケールのことでは)
Akihiro_py

2021/04/15 02:09

ごめんなさい、誤記です 正)指数表記 誤)対数目盛
Admiral

2021/04/15 11:19

ご回答有難うございます。 # 対数表記から普通の表記に変換 plt.ticklabel_format(style='plain',axis='y')  これで整数になりました! ですが、1000000、5000000となって読みにくいので3桁区切りのカンマを入れたいです。 (1,000,000のようにしたいです。) plt.yticks(np.arange(1000000,5000000,1000000))をカンマで区切ろうとしましたが、arrangeの括弧内(Start,End,Step)がカンマ区切りなのでうまくいきませんでした。 何か良い方法がありましたらご教示頂けますと幸いです。
Akihiro_py

2021/04/16 13:00

記法が変わるのですが、以下でできるようです。 軸ラベルの数値を三桁カンマ区切りで描画する(matplotlib) https://qiita.com/quyasys/items/c144623fb709fd83259e # 三桁カンマの設定 ax.yaxis.set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x)))) pltの書き方を探してみましたが、無いみたいです。
Admiral

2021/04/16 13:18

始めにax = plt.subplot(1,2,1)とした後、以下のコードを追加して上手く行きました。解決です。ご協力頂き有難う御座いました。 # 三桁カンマの設定 ax.yaxis.set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))
Akihiro_py

2021/04/17 11:23 編集

それでエラー無しになるんですね。 よかったです!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問