質問するログイン新規登録
Matplotlib

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

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

3回答

5786閲覧

python matplotlib 共通のカラーバー

raspypy

総合スコア247

Matplotlib

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

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2020/03/09 02:38

編集2020/03/17 07:37

0

0

##やろうとしていること

オリジナルの画像と、バイキュービック画像を並列に表示させています。

この2つの画像のカラーバーを
共通化
画像と同じサイズに合わせる
ことをしたいと考えています。

次のプログラムコードで同じ画像を2つ並べてカラーバーを画像サイズに配置するところまでできました。
右側の画像をバイキュービック画像にしたいのですが、方法が分かりません。

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

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

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

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

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

raspypy

2020/03/09 04:21

ご指摘ありがとうございます。 そのうえで、質問を少し変更させていただきました。 同じ画像であれば、カラーバーを画像に合わせられるようになりましたが(コードを掲載しました)、 バイキュービック画像で実現できておりません。
guest

回答3

0

ベストアンサー

https://matplotlib.org/3.2.0/api/_as_gen/matplotlib.pyplot.pcolor.html

を見る限り、 pcolor()interpolation パラメータを取れるように見えません。

カラーバーを画像に合わせるため、axes[1].pcolormeshを使っています。

の部分がよくわからないのですが、imshow() を使って、pcolor() と同じようなの形式で出力することはできますので、そちらで対応 するのは駄目なのでしょうか。

Python

1sensordata = np.array(linedata) 2fig, ax = plt.subplots(figsize=(8,4),ncols=2) 3mappable0 = ax[0].imshow(sensordata, cmap="plasma", 4 extent=[0,sensordata.shape[0],0,sensordata.shape[1]], 5 aspect='auto', 6 origin='lower') 7mappable1 = ax[1].imshow(sensordata, cmap="plasma", 8 extent=[0,sensordata.shape[0],0,sensordata.shape[1]], 9 interpolation="bicubic", 10 aspect='auto', 11 origin='lower') 12fig.colorbar(mappable0, ax=ax[0]) 13fig.colorbar(mappable1, ax=ax[1]) 14fig.tight_layout()

イメージ説明

投稿2020/03/09 04:45

magichan

総合スコア15898

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

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

magichan

2020/03/09 04:51 編集

若干補足 origin='lower': (0,0)を左上から左下に持ってくる extent=[0,sensordata.shape[0],0,sensordata.shape[1]] : 右下が(-0.5, -0.5) になっているのを (0,0)にする aspect='auto' : 正方ピクセルやめる です。これで pcolor() とほほ同等になるかと思います
raspypy

2020/03/09 05:00

補足までありがとうございます。 求めていた表示が得られました。
guest

0

interpolation を使いたいのであれば、imshow() を使えばよいのではないでしょうか。
両方とも imshow() を使えば図の大きさも揃います。

python

1import matplotlib.pyplot as plt 2import numpy as np 3from mpl_toolkits.axes_grid1 import make_axes_locatable 4 5data = np.random.randint(0, 256, (20, 20)) 6 7fig, [ax1, ax2] = plt.subplots(figsize=(8, 4), ncols=2, sharey=True) 8im1 = ax1.imshow(data, cmap="plasma", aspect="auto") 9im2 = ax2.imshow(data, cmap="plasma", interpolation="bicubic", aspect="auto") 10ax1.set_xlabel("X") 11ax2.set_xlabel("X") 12ax1.set_ylabel("Y") 13fig.subplots_adjust(wspace=0.07) 14 15divider = make_axes_locatable(ax2) 16cax = divider.append_axes("right", size="5%", pad=0.05) 17fig.colorbar(im2, cax=cax) 18 19plt.show()

イメージ説明

追記

python

1import matplotlib.pyplot as plt 2import numpy as np 3from mpl_toolkits.axes_grid1 import ImageGrid 4 5data = np.random.randint(0, 256, (20, 20)) 6 7fig = plt.figure(figsize=(10, 5)) 8 9grid = ImageGrid( 10 fig, 11 111, 12 nrows_ncols=(1, 2), 13 axes_pad=0.2, 14 share_all=True, 15 cbar_location="right", 16 cbar_mode="single", 17) 18 19im1 = grid[0].imshow( 20 data, cmap="plasma", extent=[0, data.shape[0], 0, data.shape[1]], origin="lower", 21) 22im2 = grid[1].imshow( 23 data, 24 cmap="plasma", 25 interpolation="bicubic", 26 extent=[0, data.shape[0], 0, data.shape[1]], 27 origin="lower", 28) 29grid[0].set_xlabel("X") 30grid[1].set_xlabel("X") 31grid[0].set_ylabel("Y") 32 33for ax in grid: 34 # 目盛りはここで設定 35 ax.set_xticks(np.arange(0, 21, 2)) 36 ax.set_yticks(np.arange(0, 21, 2)) 37 38grid.cbar_axes[0].colorbar(im2) 39 40plt.show()

イメージ説明

投稿2020/03/09 04:30

編集2020/03/09 07:07
tiitoi

総合スコア21960

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

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

raspypy

2020/03/09 04:37

ありがとうございます。 質問に画像を添付いたしましたが、図にくらべてカラーバーが若干大きいのは、何か調整できるのでしょうか。 質問に試したコードと画像を掲載いたします。
tiitoi

2020/03/09 04:52

コードを修正しましたがこのような意図であっていますか?
raspypy

2020/03/09 05:40

ありがとうございます。 教えていただいたコードを色々試させていただきました。 私の理解が間違えていたらすみません。 ①右画像は、左画像に比べて、カラーバーの分だけ小さいサイズとなりますか? ②最終的なコードと得られた画像を質問に掲示させていただきましたが、  Y軸は0~8まで1ずつプロットされていますが、X軸が2ずつプロットとなってしまいますが、  これはどこで設定するのでしょうか。 教えていただけると助かります。
tiitoi

2020/03/09 06:26

> 右画像は、左画像に比べて、カラーバーの分だけ小さいサイズとなりますか? 最初に回答したコードだと、右の図の一部をカラーバーの領域に割り当てているので、その分小さくなります。 > 最終的なコードと得られた画像を質問に掲示させていただきましたが、  Y軸は0~8まで1ずつプロットされていますが、X軸が2ずつプロットとなってしまいますが、  これはどこで設定するのでしょうか。 ax.set_xticks(), ax.set_yticks() で目盛りの値を明示的に指定できます。 上記2点を修正したコードを追記しましたが、どうでしょうか。 2つの画像が同じ大きさになっていることは確認しました。
raspypy

2020/03/09 06:41

ありがとうございます。 提示いただいたコードを試してみましたが、エラーがでてしまいます。 質問に試したコードとエラーメッセージを掲載させていただきました。
tiitoi

2020/03/09 07:12 編集

質問のエラーはでなかったのですが、一部コードに不備があったので修正しました。 回答の追記のコードをコピペして動きませんでしょうか? こちらで確認した matplotlib のバージョンは 3.1.3 です
raspypy

2020/03/09 07:27

回答に追記していただいたコードで動きました。 ありがとうございました。 別質問(3次元グラフ)でも回答いただき、ありがとうございます。 別途質問を挙げさせていただこうかと考えていますが、 私がこれまで作成してきたプログラムはpython2.7.16で作成していますが、 python3系に移行するには、何をすれば良いのかが理解できておりません。 とても大変な作業になるのでしょうか。。。
tiitoi

2020/03/09 07:40

> python3系に移行するには、何をすれば良いのかが理解できておりません。 raspypy さんの現状のコードがどの程度の規模のものなのかわからないので一概に容易かどうかは言えないですが、matplotlib などのライブラリの使い方は一緒なので、Python の言語仕様の変更部分だけ修正すれば動くと思います。 例えば、print "hoge" が print("hoge") のように関数になるなどです。 とりあえず、Python 3 で現状のコードを実行してみて、エラーが出る部分を直していくという感じでいいと思います。
raspypy

2020/03/09 07:45

親切にありがとうございます。 何点かお教えいただけると助かります。 ①今のpython2.7のimgファイルをバックアップ ②私の手元のラズパイを  python3.7をデフォルトに変更 ③python3.7で今までのプログラムを1つずつ動作させてみて、エラーが出る場合は修正 この流れで、3系への移行が可能と理解して良いでしょうか。 もう1点 python2.7で作成したプログラムにおいて、 pipや、apt-getなどで、インストールしたライブラリについては、どう考えれば良いのでしょうか? 上記の流れで、今までのプログラムの動作確認のタイミングで、エラーとなるのでしょうか? 質問とはかけ離れた内容となってしまい、申し訳ありません。
tiitoi

2020/03/09 07:59 編集

環境はラズパイだったのですね。 システムのアプリケーションが Python 2 を使っている可能性があるので、既存の Python 2 をアンインストールして、Python 3を入れるのではなく、Python 2 はそのままにしておいて、Python 3 を入れるほうが、安全だと思います。併用が可能です。 > pipや、apt-getなどで、インストールしたライブラリについては、どう考えれば良いのでしょうか? その場合、Python 2 と Python 3は環境が独立しているので、使うライブラリは Python 3 のほうに新規でインストールする必要があります。 どちらの環境に対して行なうかは、pip3, python3 コマンドのようにコマンドで区別するようになっています。 自分はラズパイは使ったことがないのですが、「Raspberry Pi Python 3」で検索すると、Python 3 を入れる方法に関する情報が出てくると思います。 環境構築は多少なりとも手間がかかるので、別回答で Python 3 に移行することをおすすめしましたが、現状、Python2であることが原因でなにか困っていることがないのであれば、そのままでもいいかもしれません。
raspypy

2020/03/09 11:27

> 現状、Python2であることが原因でなにか困っていることがないのであれば、そのままでもいいかもしれません。 Raspberry Piであれば、python2.7のままでも大丈夫でしょうか? 私も調べてみると、サポートが終了した、numpyがpython2をサポートしなくなるなど、とても不安になりました。 今抱えている問題(3次元グラフ含めて)が解決したらpython3への移行を考えてみようかなと思いました。
tiitoi

2020/03/09 11:43

> Raspberry Piであれば、python2.7のままでも大丈夫でしょうか? ラズパイは使ったことがないのでわからないのですが、ライブラリを更新しなければ、今動いていたコードがある日突然動かなくなるということはないです。 ただ、ライブラリが Python 2 のサポートを切ったのであれば、ライブラリを最新版に更新したりすれば、動かなくなることはありえます。 > 今抱えている問題(3次元グラフ含めて)が解決したらpython3への移行を考えてみようかなと思いました。 移行したほうがよいことは間違いないので、その方針でいいと思います。
raspypy

2020/03/09 12:53

何回も親切に回答していただきありがとうございました。
raspypy

2020/03/11 03:50

tiitoiさま 別質問で、これまでに作成したbicubic画像と3D画像を1つにまとめるプログラムについて質問をさせていただいております。 もし可能でしたら、そちらもアドバイスいただけると助かります。
guest

0

"bicubic"のスペルは合っていますか?

投稿2020/03/09 02:45

Luke02561

総合スコア404

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

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

raspypy

2020/03/09 03:54

合っていると思います。 質問に掲示している画像を取得できているので。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問