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

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

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

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

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

Python

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

Q&A

解決済

1回答

2984閲覧

カラーマップ作成時、範囲外の値となるメッシュを白で描画したい

tukituki_84

総合スコア27

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2022/09/11 09:38

編集2022/09/11 09:43

環境

OS: Mac
エディタ: atom
言語: Python

Numpy以外のモジュールは使い慣れていません。。

実現したいこと

FitファイルのデータをPythonで読み込み、matplotlibでカラーマップを作成したいです(今回用いているFitファイルは'a.fit'という名前です)。

該当のソースコード

Python

1import astropy.io.fits as iofits 2import matplotlib.pyplot as plt 3import numpy as np 4 5list = iofits.open("a.fit") #a.fitは1×301×301の3次元配列(実質2次元) 6hdu = list[0] 7data = np.array([hdu.data]) 8header = hdu.header 9re = data.reshape(1*301, 301) #1×301×301の3次元配列を、301×301の2次元配列に変換 10 11plt.imshow(re, cmap='nipy_spectral', vmin=5e+12, vmax=2e+14) 12plt.colorbar() 13plt.savefig('a.png', dpi=200) #画像保存

実現したいこと

カラーマップは上のコードで作成できましたが、もし可能なら、
ある値よりも大きい(または小さい)メッシュについて、白色で描画したいと考えています。

Python

1plt.imshow(re, cmap='nipy_spectral', vmin=5e+12, vmax=2e+14)

今回、're'というデータの値を5e+12から2e+14の範囲についてカラーマップで描画しましたが、

カラーマップのパラメータをcmap='nipy_spectral'としたことで、nipy_spectralのデフォルトで範囲外の値となるメッシュが灰色で描画されてしまいます。
(カラーバーを見ると、2e+14以上は灰色になっています)
イメージ説明

そこで、'cmap.set_under('white')'や'cmap.set_over('white')'を使って範囲外の値となるメッシュの色を灰色→白色に変えたいのですが、

name 'cmap' is not defined

と出てきて、上手くいきませんでした。

どこを訂正すればよいでしょうか、教えていただきたいです。

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

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

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

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

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

guest

回答1

0

自己解決

解決しました。cmapを定義すればいいのですね

Python

1import astropy.io.fits as iofits 2import matplotlib.pyplot as plt 3import numpy as np 4 5list = iofits.open("a.fit") 6hdu = list[0] 7data = np.array([hdu.data]) 8header = hdu.header 9re = data.reshape(1*301, 301) #1×301×301の3次元配列を、301×301の2次元配列に変換 10 11cmap = plt.cm.nipy_spectral #cmapを定義 12# cmap.set_under('white') 13cmap.set_over('white') 14 15plt.imshow(re, cmap=cmap, vmin=5e+12, vmax=2e+14) 16# plt.imshow(re, origin='lower', cmap='nipy_spectral', vmin=1e+13, vmax=1e+14) 17plt.colorbar() 18plt.savefig('a.png', dpi=200) 19

投稿2022/09/11 09:50

編集2022/09/11 09:53
tukituki_84

総合スコア27

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問