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

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

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

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

Python 3.x

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

Q&A

解決済

1回答

1918閲覧

3軸のグラフにおいて信号値によって色分けして表示する方法

dendendenjirou

総合スコア40

Matplotlib

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

Python 3.x

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

0グッド

0クリップ

投稿2020/05/06 02:50

編集2020/05/06 02:54

画像を扱っています。
画像枚数200枚程度、ピクセルが380×380程度の画像です。
画像を積み上げて立体的画像として扱っています。
配列は(画像枚数、横軸ピクセル、縦軸ピクセル)でグレイスケールです。

3Dのグラフにて、
X軸:ピクセル横軸
Y軸:ピクセル縦軸
Z軸:画像枚数

で軸を取り、各ピクセルの値によって色分けで値を表示したいと考えております。
しかし、なかなかいい方法がありません。
どなたか、いい方法等ご存知ではないでしょうか?

matplotlib、seabornでヒートマップ等いろいろと検索をしてみたのですが、z軸が値となる方法や、ヒートマップは2Dで表示のみでいい方法が見つかりません。

どなたか、ご存知の方がいらしましたらご教授いただけると幸いです。

イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

matplotlibのcmap(Colormap)を使ってはどうでしょうか。引数cに値を入れて引数cmapにカラーマップを指定するイメージです。

投稿2020/05/11 03:03

x98000

総合スコア1096

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

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

dendendenjirou

2020/05/11 21:32

ご回答ありがとうございます。 教えて頂いた通りにやって表示は出来たのですが、 選択画像が1枚の時はきちんと表示できるのですが、複数枚の時は同一断面に複数枚の画像が表示されてしまいます。 お忙しいと事恐縮ではございますが、知恵を貸していただけると幸いです。 コードは以下となります。 # -*- coding: utf-8 -*- import fileselect as fs import pydicom import numpy as np import cv2 import matplotlib.pyplot as plt filename = fs.many_files() dcm =pydicom.dcmread(filename[0]) row, columns = dcm.pixel_array.shape[0], dcm.pixel_array.shape[1] pix = np.zeros((len(filename),row//3,columns//3),dtype='int16') for i in range(len(filename)): dcm = pydicom.dcmread(filename[i]) pix[i] = cv2.resize(dcm.pixel_array,(row//3,columns//3)) x_list=[i for i in range(int(row//3))] y_list=[i for i in range(int(columns//3))] z_list=[i for i in range(len(filename))] Z,X,Y=np.meshgrid(z_list,x_list,y_list) fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.set_xlabel("x",labelpad=50,fontsize=8) ax.set_ylabel("y",labelpad=50,fontsize=8) ax.set_zlabel("z",labelpad=50,fontsize=8) ax.set_xlim(row//3,0) ax.set_ylim(0,columns//3) ax.set_zlim(0,len(filename)) sc = ax.scatter(Y.ravel(),X.ravel(),Z.ravel(), c = pix.ravel(),alpha=0.1,zdir='z', cmap='PuRd') fig.colorbar(sc) plt.show()
x98000

2020/05/12 01:00

実行できる環境が無いので想像になりますが、forループとその内側の内包表記で同じ変数 i を使っているので影響が出そうです。 なお、既に問題がタイトルと異なっているので別に質問したほうがいいでしょう。ソースコードもフォーマット出来るので。
dendendenjirou

2020/05/12 09:47

今回は、本当にありがとうございました。 3軸グラフでカラーマップ表示。 一歩、完成に近づくことができました。 同一断面に複数枚の画像が載ってしまう件に関してはまだ解決しておりませんが、ご指摘の通り再度、質問をあげさせて頂きます。 今回は、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問