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

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

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

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

Python

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

Q&A

解決済

1回答

3564閲覧

matplotlibで図を縦に2つ並べたい

ruei

総合スコア284

Matplotlib

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

Python

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

0グッド

0クリップ

投稿2018/10/13 11:58

編集2018/10/13 12:00

matplotlibでhttps://momonoki2017.blogspot.com/2017/12/matplotlib.htmlを参考に図を縦に2つ並べようとしたところ、図が一つしか表示されず、図の中にあるべきプロットが表示されません。

コードは次の通りです。 「#新しく追加」とあるのが、以前のコードに付け足した部分です。

import sys import h5py import numpy as np import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt import matplotlib.animation as animation from PIL import Image import moviepy.editor as edit from mpl_toolkits.axes_grid1 import make_axes_locatable def update(k): global vmax global vmin global levels_ plt.cla() # clear axis for i in range(0, 142): for j in range(0, 142): U[i][j] = Ax[j][i][k] #Axは別の場所で代入済み plt.subplot(1, 2, 1) # 新しく追加 plt.contourf(X_vec, Y_vec, U, cmap = "bwr",levels=levels_)# 新しく追加 plt.axes().set_aspect("equal")# 新しく追加 plt.gca().set_ylim([-50, 50])# 新しく追加 plt.gca().set_xlim([-int(argvs[1])*50,int(argvs[1])*50])# 新しく追加 plt.subplot(1, 2, 2) #新しく追加 plt.contourf(X_vec, Y_vec, U, cmap = "bwr",levels=levels_) plt.axes().set_aspect("equal") plt.gca().set_ylim([-50, 50]) plt.gca().set_xlim([-int(argvs[1])*50,int(argvs[1])*50]) ticks_=np.array([-1.5, -1, -0.5, 0, 0.5, 1, 1.5],float) fig=plt.figure() # アニメーション作成 # interval [ms]毎に画像が切り替わる。 # framse回、画像を更新する。updateの第一引数は0,1,2,...,frames-1を動く。 ani = animation.FuncAnimation(fig, update, interval=50 ,frames=400) ani.save("hogehoge.gif", writer='imagemagick')

変更後のgifのスナップショットがこちらです。画像は動画として変化せず、ずっとこのままです。
変更後

変更前のgifのスナップショットがこちらです。
変更後

環境は次の通りです。

$ python Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56) [GCC 7.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import matplotlib >>> matplotlib.__version__ '2.2.2'

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

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

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

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

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

guest

回答1

0

ベストアンサー

FuncAnimation で縦に2つグラフを表示する例

サンプルコード

import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation from PIL import Image def update(data, ax1, ax2): x = np.linspace(0, np.pi * 4, 100) y = np.sin(x + data) ax1.clear() ax1.plot(x, y, c='b') ax2.clear() ax2.plot(x, y, c='g') fig, [ax1, ax2] = plt.subplots(2, 1, figsize=(5, 10)) anim = FuncAnimation(fig, update, fargs=(ax1, ax2), interval=100, frames=500) anim.save('test.gif', writer='imagemagick')

イメージ説明

投稿2018/10/13 12:14

tiitoi

総合スコア21956

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

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

ruei

2018/10/13 12:23

自分のコードはどこが間違えていたのでしょうか
tiitoi

2018/10/13 12:34 編集

plt.axes() は今の current axes を取得するのではなく、Axes を作成して、それを current axes に設定する関数です。 そのため、それ以前に作成した axes は削除されてしまったのだと思います。 https://matplotlib.org/api/_as_gen/matplotlib.pyplot.axes.html current axes の取得は plt.gca() です。 ``` plt.axes().set_aspect("equal") ```
ruei

2018/10/14 09:36

理解できました。 プロットもうまくできました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問