all-in-one-seo-pack
domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init
action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114easy-fancybox
domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init
action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114urvanov-syntax-highlighter
domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init
action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114breadcrumb-navxt
domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init
action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114advanced-ads
domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init
action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114lancr
ドメインの翻訳の読み込みが早すぎました。これは通常、プラグインまたはテーマの一部のコードが早すぎるタイミングで実行されていることを示しています。翻訳は init
アクション以降で読み込む必要があります。 詳しくは WordPress のデバッグをご覧ください。 (このメッセージはバージョン 6.7.0 で追加されました) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114matplotlibを使ってカラー表示をする際、既存のカラーマップでは満足がいかないことがあると思います。
そんな時は自作でカラーマップを作ってしまおうというのが今回の企画です。
カラーマップ表示するには、どの値からどの値までを、どの様な区切りで表示するか考えます。
その後、その区切りをどの色で表示するか決めます。
今回は0~99までの値を10区切りで、色を
[ black , lightgrey , darkorange , gole , chartreuse , palegreen , mediumspringgreen , paleturquoise , steelblue , navy ]
上記10色で表示してみたいと思います。
matplotlibのカラー表示はここで確認できます。
今回はseabornのヒートマップを用いて確認をしてみます。
ちなみに、seabornはデータの可視化をmatplotlibよりも強力にサポートしてくれるライブラリーです。
今回提示するヒートマップもseabornならではの機能です。
seabornはmatplotlibと違うライブラリーかと思われるかもしれませんが、実は内部ではmatplotlibが動いているらしいです。
もちろん、カラーマップの設定はmatplotlibでも利用できますのでご安心を。
色を指定します。先ほども提示しましたが再度掲示します。
cmap = ListedColormap( [ 'black' , 'lightgrey' , 'darkorange' , 'gold' , 'chartreuse' , 'palegreen' , 'mediumspringgreen' , 'paleturquoise' , 'steelblue' , 'navy' ])
ここで注意していただきたいので色の名前はシングルコーテーション「 ‘ 」で囲う必要があります。
それでは、コードを提示します。
import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap, BoundaryNorm import seaborn as sns arr = np.arange(100) arr = arr.reshape([10,10]) print(arr) fig=plt.figure(figsize=(5, 5)) ax1 = fig.add_subplot(1,1,1) ax1.axes.xaxis.set_visible(False), ax1.axes.yaxis.set_visible(False) ax1.spines['bottom'].set_visible(False), ax1.spines['top'].set_visible(False) ax1.spines['right'].set_visible(False), ax1.spines['left'].set_visible(False) cmap = ListedColormap( [ 'black' , 'lightgrey' , 'darkorange' , 'gold' , 'chartreuse' , 'palegreen' , 'mediumspringgreen' , 'paleturquoise' , 'steelblue' , 'navy' ]) norm = BoundaryNorm(bounds, cmap.N) ax1 = sns.heatmap(arr, annot=True, cbar=True, cmap=cmap) plt.show()
きちんと10間隔で設定した色通りに表示されています。
等間隔で色を変えたい場合はこれでいいのですが、例えば40~60の間だけ色を変えたい場合はこれではうまくいきません。
ある領域だけ色を変えたい場合はまず色分けする領域を指定する必要があります。
30~70の間だけを5づつ色を付けたい場合、まず色の指定範囲を以下のように設定します。
bounds = [0, 30, 35, 40, 45, 50, 55, 60, 65, 70, 100]
ただ、これだけだと範囲と色の組み合わせができていません。
なので「BoundaryNorm」という関数を使って紐づけしてあげます。
norm = BoundaryNorm(bounds, cmap.N)
ちなみに、cmapの後の「 .N 」とはboundsとcmapに対応させる意味があるらしいです。これが無いとエラーになります。
そして、これを画像設定axの中に組み込んでいきます。
ax1 = sns.heatmap(arr, annot=True, cbar=True, cmap=cmap, norm=norm)
コード全体としては
import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap, BoundaryNorm import seaborn as sns arr = np.arange(100) arr = arr.reshape([10,10]) print(arr) fig=plt.figure(figsize=(5, 5)) ax1 = fig.add_subplot(1,1,1) ax1.axes.xaxis.set_visible(False), ax1.axes.yaxis.set_visible(False) ax1.spines['bottom'].set_visible(False), ax1.spines['top'].set_visible(False) ax1.spines['right'].set_visible(False), ax1.spines['left'].set_visible(False) cmap = ListedColormap( [ 'black' , 'lightgrey' , 'darkorange' , 'gold' , 'chartreuse' , 'palegreen' , 'mediumspringgreen' , 'paleturquoise' , 'steelblue' , 'navy' ]) bounds = [0, 30, 35, 40, 45, 50, 55, 60, 65, 70, 100] norm = BoundaryNorm(bounds, cmap.N) ax1 = sns.heatmap(arr, annot=True, cbar=True, cmap=cmap, norm=norm) plt.show()
ax1 = sns.heatmap(arr, annot=True, cbar=True, cmap=cmap, norm=norm)
の部分を以下に変更すれば完了です。
ax1.imshow(arr, cmap=cmap, norm=norm)
なお、matplotlibで値を表示する機能は標準ではないと思われますので、もし値を表示したい方はseabornを用いた方が簡便でいいかと思われます。
お疲れ様でした。
DICOM画像を表示する方法は4つの方法がPydicomにはサポートされています。
とりあえず、matplotlibを使って表示させてみたいと思います。
import pydicom from matplotlib import pyplot as plt %matplotlib inline #jupyter notebookでない場合は不要 ds = pydicom.dcmread('CT2.dcm') plt.imshow(ds.pixel_array,cmap=plt.cm.bone) plt.show() #jupyter notebookでない場合は必要
plt.show()
はjupyter notebookを使用している場合は不要ですが,他のコード環境を使用している場合は必要となります。
どうでしょう?DICOM画像が表示できましたか?
この画像は、いつも見慣れたグレイスケールの画像ですが
plt.imshow(ds.pixel_array,cmap=plt.cm.bone)
boneの部分を変えることで
続いてはhotで設定してみました。
どうですか。アイソトープの画像みたくなりましたね。
この様に、cmapの設定を変更することで、カラースケールを変えることができます。
matplotlibのリファレンスページには約80種類のカラーマップがあり
colorExamplesのページにて確認することができます。
是非ともいろいろと試してみてください。