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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

5013閲覧

matplotlibで4Dプロットをしたい。

physics303

総合スコア89

Matplotlib

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

5クリップ

投稿2018/11/01 02:06

編集2018/11/01 02:26

Z(β,η)という二変数関数をカラープロットすることはmatplotlibで容易にできます。

一方で、Z(β,η,h)という三変数関数があったときに、この画像(クリック)にあるように、
Z(β,η,-1),Z(β,η,-0.5),Z(β,η,0),Z(β,η,0.5),Z(β,η,1)のカラープロットを高さ方向に並べることによって、三変数関数を上手くプロットをしたいのですが、matplotlibでどのようにすればよいでしょうか。

既に、

python

1def function_Z(β,η): 2 h = 0 3 val = (適当な処置) 4 5 return val 6 7B,Η = np.meshgrid(β,η) 8Z[i][j] = function_Z(B,H) 9plt.pcolor(B, H, Z)

とすることでZ(β,η,0)をカラープロットすることはできています。

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

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

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

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

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

Fallout_18

2018/11/03 13:12

この図って、ただヒートマップを-1,-0.5,....0.5,1に置いただけではないのですか?
physics303

2018/11/05 05:02

そうです。そういう図を得たいのです。
guest

回答1

0

同様の質問Plot multiple heatmap planes in 3D matplotlib plotを見つけましたが回答がついていませんね。
2d slices in 3d plot #3919を参考にして、3D上に複数平面を配置することはできました。
が、これで力尽きて平面毎に色分布(関数)変える方法やカラーバー配置などは実現できませんでした…

他、参考:
Matplotlib - Wrong overlapping when plotting two 3D surfaces on the same axes

Python

1import matplotlib.pyplot as plt 2import numpy as np 3from mpl_toolkits.mplot3d import Axes3D 4 5n_pts = 10 # x,yのセル分割数および色値の分解能 6 7# 平面毎に色データを作成 8 9# 平面1と2 10ary1 = (np.mgrid[-1:1:1j*n_pts, -1:1:1j*n_pts, -1:1:1j*n_pts]**2).sum(0) # これで色値分布がきまる? 11n_x, n_y, n_z = ary1.shape # n_pts,n_pts,n_pts 12z_cut1 = ary1[:,:,n_z//2] 13min_val1,max_val1 = z_cut1.min(),z_cut1.max() 14z_val1 = (z_cut1-min_val1)/(max_val1-min_val1) 15print(z_cut1.shape) 16print(z_val1) 17 18# 平面3 19ary3 = (np.mgrid[-1:1:1j*n_pts, -1:1:1j*n_pts, -1:1:1j*n_pts]**2).sum(0) # どう変えればいいのか? 20z_cut3 = ary3[:,:,np.abs(n_z)//2] 21min_val3,max_val3 = z_cut3.min(),z_cut3.max() 22z_val3 = (z_cut3-min_val3)/(max_val3-min_val3) 23 24# xy平面に平行で5刻みに平面を配置 25X, Y = np.mgrid[0:n_x,0:n_y] 26Z0 = n_z//2 * np.ones((n_x, n_y)) 27Z1,Z2,Z3 = Z0, Z0+5, Z0+10 28 29# カラーマップ 30cm1 = plt.cm.YlOrRd # 黄 -> オレンジ -> 赤 31cm2 = plt.cm.RdPu # 赤 -> 紫 32cm3 = plt.cm.GnBu # 緑 -> 青 33 34fig = plt.figure() 35ax = fig.add_subplot(111,projection='3d') 36ax.plot_surface(X,Y,Z1, facecolors=cm1(z_val1), shade=False) 37ax.plot_surface(X,Y,Z2, facecolors=cm2(z_val1), shade=False) 38ax.plot_surface(X,Y,Z3, facecolors=cm3(z_val3), shade=False) 39plt.show()

イメージ説明

投稿2018/11/11 02:32

編集2018/11/11 02:33
can110

総合スコア38266

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問