matplotlib で線の色を設定するために Colormaps を使用する
2023-09-16 16:58:06
質問
matplotlib で、実行時に提供されるスカラー値で線の色を設定するには、カラーマップ (例えば
jet
)? 私はここでいくつかの異なるアプローチを試してみましたが、私は困っていると思います。
values[]
はスカラーを並べた配列、curves は1次元の配列、labels は文字列の配列です。各配列は同じ長さです。
fig = plt.figure()
ax = fig.add_subplot(111)
jet = colors.Colormap('jet')
cNorm = colors.Normalize(vmin=0, vmax=values[-1])
scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=jet)
lines = []
for idx in range(len(curves)):
line = curves[idx]
colorVal = scalarMap.to_rgba(values[idx])
retLine, = ax.plot(line, color=colorVal)
#retLine.set_color()
lines.append(retLine)
ax.legend(lines, labels, loc='upper right')
ax.grid()
plt.show()
どのように解決するのですか?
このエラーは
jet
. 基底クラスである
Colormap
を 'jet' という名前で作成していますが、これは 'jet' カラーマップのデフォルト定義を取得することとは全く異なります。この基底クラスは決して直接作成してはならず、サブクラスのみをインスタンス化する必要があります。
あなたの例で発見されたことは、Matplotlibのバグ的な動作です。このコードが実行されたとき、より明確なエラーメッセージが生成されるはずです。
これはあなたの例の更新版です。
import matplotlib.pyplot as plt
import matplotlib.colors as colors
import matplotlib.cm as cmx
import numpy as np
# define some random data that emulates your indeded code:
NCURVES = 10
np.random.seed(101)
curves = [np.random.random(20) for i in range(NCURVES)]
values = range(NCURVES)
fig = plt.figure()
ax = fig.add_subplot(111)
# replace the next line
#jet = colors.Colormap('jet')
# with
jet = cm = plt.get_cmap('jet')
cNorm = colors.Normalize(vmin=0, vmax=values[-1])
scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=jet)
print scalarMap.get_clim()
lines = []
for idx in range(len(curves)):
line = curves[idx]
colorVal = scalarMap.to_rgba(values[idx])
colorText = (
'color: (%4.2f,%4.2f,%4.2f)'%(colorVal[0],colorVal[1],colorVal[2])
)
retLine, = ax.plot(line,
color=colorVal,
label=colorText)
lines.append(retLine)
#added this to get the legend to work
handles,labels = ax.get_legend_handles_labels()
ax.legend(handles, labels, loc='upper right')
ax.grid()
plt.show()
結果的に
を使うことで
ScalarMappable
を使用することは、私の関連する回答で提示されたアプローチよりも改善されています。
matplotlibを使用して20以上のユニークな凡例色を作成する
関連
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] 複数の例外を1行でキャッチする(ブロックを除く)
-
[解決済み] Matplotlibでプロットを表示するのではなく、画像ファイルに保存する。
-
[解決済み] IPythonノートブックmatplotlibプロットをインラインで行う方法
-
[解決済み】forループを使った辞書の反復処理
-
[解決済み】Matplotlibで図のタイトルと軸ラベルのフォントサイズを設定するには?
-
[解決済み] matplotlib のプロットでフォントサイズを変更する方法
-
[解決済み] Jupyter (IPython)ノートブックのセッションをpickleして保存する方法
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] DataFrameの文字列、dtypeがobjectの場合
-
[解決済み] PythonでSVGからPNGに変換する
-
[解決済み] SQLAlchemy: 日付フィールドをフィルタリングする方法は?
-
[解決済み] ファブリック経由でデプロイユーザとしてvirtualenvを有効化する
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
-
[解決済み] スペースがないテキストを単語のリストに分割する方法
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] PyQtアプリケーションのスレッド化。QtスレッドとPythonスレッドのどちらを使うか?
-
[解決済み] Pythonによる一対のクロスプロダクト [重複] (英語)
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する