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

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

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

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

Q&A

解決済

1回答

750閲覧

カラーバーの色の変化がアニメーションと静止画で異なる

MF0524

総合スコア48

Python

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

0グッド

0クリップ

投稿2021/10/16 03:36

###発生している問題
以下のコードを実行して作成したアニメーションと静止画ではカラーバーの色の変化が異なります。
静止画ではカラーバーの色の変化がグラデーションに変化するのに対して、アニメーションの場合は段階的に変化します。これはコードのどこかにミスがあるのでしょうか?

###アニメーションを作成するコード
以下のコードはGoogle Colabにて実行しました。

python

1%matplotlib inline 2import matplotlib.pyplot as plt 3import numpy as np 4import matplotlib.animation as animation 5from IPython.display import Image 6 7#結果を描画するための図の作成 8fig, ax = plt.subplots(figsize=(8, 6)) 9x, y = np.mgrid[-10:11, -10:11] 10 11#各画像を一時的に保存するためのリスト 12ims = [] 13 14#ランダムな値をxy平面にプロットした画像をfor文で100枚作成 15for i in range(0, 100): 16 z = np.random.randint(-15, 15, x.shape) 17 pcm = ax.pcolormesh(x, y, z, shading="gouraud", cmap="gray", vmin = 0, vmax = 10) 18 ims.append([pcm]) #各フレーム画像をimsに追加 19ax.set_xlabel("x", fontsize=22) 20ax.set_ylabel("y", fontsize=22) 21fig.colorbar(pcm) 22plt.close(fig) 23 24#アニメーションの作成と表示 25ani = animation.ArtistAnimation(fig, ims, interval=10) 26ani.save("result.gif", writer="pillow") 27Image('./result.gif', format='png')

gifデータを貼り付けれなかったので、スクショになりますが、次のようなカラーバーを持つgifが作成されます。
イメージ説明

###静止画を作成するコード

python

1fig, ax = plt.subplots(figsize=(8, 6)) 2x, y = np.mgrid[-10:11, -10:11] 3z = np.random.randint(-15, 15, x.shape) 4pcm = ax.pcolormesh(x, y, z, shading="gouraud", cmap="gray", vmin = 0, vmax = 10) 5ax.set_xlabel("x", fontsize=22) 6ax.set_ylabel("y", fontsize=22) 7fig.colorbar(pcm)

このコードを実行すると、以下の画像が作成されます。
イメージ説明

###気になっていること
カラーバーに対して初期化行う、というサイトを見たのですが、何をしているのかいまいち分かりませんでした。ありえない気はしますが、for文で画像を作成しているうちにカラーバーを上書きしていった可能性はあるのでしょうか?

以上になります。どうぞよろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

私の環境では、

python

1ani.save("result.gif", writer="pillow")

python

1ani.save("result.gif")

にしたら、静止画像と同じきれいなグラデーションのカラーバーになりました。

writerキーワードを指定しないとデフォルトではffmpegが使われます。私の環境にはffmpegをインストールしてあるので、それが使われたようです。
Pillowは静止画用のライブラリ、ffmpegは動画用のライブラリなので、その違いが何か関係しているのかもしれませんね。

リンクされたページの、カラーバーを1回だけ初期化するのも試してみましたが、それでは変化はありませんでした。リンク先のページの画像も段階式に変化するカラーバーになっているので、これは関係ないようです。

投稿2021/10/16 11:31

etherbeg

総合スコア1195

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

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

MF0524

2021/10/16 13:10

ご回答ありがとうございます。こちらの環境ではffmpegは利用できなかったので確認はできていませんが、納得しました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問