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

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

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

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

Python

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

Q&A

解決済

1回答

1966閲覧

matplotlibの描画領域の指定方法について

babbleman

総合スコア107

Matplotlib

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

Python

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

0グッド

1クリップ

投稿2020/05/24 04:02

matplotlibで棒グラフ、円グラフなどをまとめて描画するにはどうしたらよろしいでしょうか?

やりたいこととしては描画領域を2×3で区分けして
それぞれの領域に図を描画したいです。

fig,ax=subplot()
などで指定した場所に描画できるという記事を散見しましたが、どのタイミングでplotするか、などがよくわかっていないです。
まずfigureとはなんなのか。(自分は今で二次グラフしか使用していなかったのでplotしてshowするだけで結果が表示されておりました。)
subplotで返されるfig,axとはなんなのか。

棒グラフを書きたいときにplt.barのあとにplt.showで画面に描画されますがbarとplotは点か棒グラフ化の違いかということでしょうか?
積み上げ棒グラフの場合plt.barを複数するのですが、どこからどこまでがこの画面の領域である、という指定方法がわからないです。

色々試行錯誤しておりわかりづらい質問で申し訳ございません。
汲み取って回答していただけると助かります。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Figure は1つの図を表す、Axes は図の中の描画領域を表すオブジェクトです。
matplotlib ではまず最初に Figure と Axes を作成するところから始めます。
Figure を格子状に分割して、Axes を作成する場合は plt.subplots(行の分割数, 列の分割数) を使用します。

イメージ説明

Axes を作成したら、それぞれの Axes オブジェクトが持つ plot() や bar() といったメソッドを呼び出して、データを描画対象の Axes 上に描画します。

python

1import matplotlib.pyplot as plt 2import numpy as np 3 4# Figure を subplots(行数, 列数) で分割する。 5fig, axes = plt.subplots(2, 3, figsize=(12, 8)) 6 7# [1行1列目] 棒グラフを作成する。 8x = np.arange(1, 6) 9y = np.random.randint(50, 100, 5) 10axes[0, 0].bar(x, y) 11 12# [1行2列目] 円グラフを作成する。 13x = [100, 200, 300, 400, 500] 14axes[0, 1].pie(x) 15 16# [1行3列目] 棒グラフを作成する。 17x = np.linspace(-3, 3, 10) 18y = x ** 2 19axes[0, 2].plot(x, y) 20 21# [2行1列目] 等高線を作成する。 22X, Y = np.mgrid[-5:5:50j, -5:5:50j] 23Z = np.sin(X) + np.cos(10 + X * Y) 24axes[1, 0].contour(X, Y, Z) 25 26# [2行2列目] 等高線を作成する。 27axes[1, 1].contourf(X, Y, Z) 28 29# [2行3列目] 折れ線グラフを作成する。 30x = [1, 2, 3, 4, 5, 6, 7] 31y1 = [1, 1, 2, 3, 5, 8, 13] 32y2 = [0, 2, 4, 6, 8, 10, 12] 33axes[1, 2].stackplot(x, y1, y2) 34 35plt.show()

イメージ説明

投稿2020/05/24 04:18

編集2020/05/24 04:28
tiitoi

総合スコア21956

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

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

babbleman

2020/05/24 05:12

ありがとうございます!非常にわかりやすいです。 ちなみにaxesというものを指定せずplt.plotのみを指定すると自動的に画面全体の真ん中をしていするよになるイメージなのでしょうか?
tiitoi

2020/05/24 05:16 編集

plt.plotのみ() を呼び出した場合、裏で Figure と1つの Axes を作成して、その Axes に対して plot() で描画しています。 どの Axes に対して描画するのかがわかりにくくなるので、自分は plt 以下の関数は subplots() か figure() 以外は使わないようにしています。
babbleman

2020/05/24 09:48

ありがとうございます!すごく参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問