matplotlib を使って独自のカラーマップを作成し、カラースケールをプロットする
2023-07-25 06:32:42
質問
私は、-2から+2までの値に対応する独自のカラーマップ(赤-混合-紫-混合-青)を作成し、私のプロットでポイントを着色するためにそれを使用したいと思います。
そして、プロットはカラースケールを右側に持っている必要があります。
これが今のところ私がマップを作成する方法です。でも、色が混ざっているのかどうかはよくわかりません。
cmap = matplotlib.colors.ListedColormap(["red","violet","blue"], name='from_list', N=None)
m = cm.ScalarMappable(norm=norm, cmap=cmap)
このように、色と値を対応させています。
colors = itertools.cycle([m.to_rgba(1.22), ..])
そして、プロットしてみます。
for i in range(0, len(array_dg)):
plt.plot(array_dg[i], markers.next(),alpha=alpha[i], c=colors.next())
私の悩みは
1. カラースケールをプロットできない。
2. 私のスケールが継続的な(滑らかな)カラースケールを作成しているかどうか完全にわからない。
どのように解決するのですか?
の例があります。
を作成する方法があります。
.
の意味を理解するために、docstring は重要です。
cdict
. それを理解した上で、例えば
cdict
をこのように使います。
cdict = {'red': ((0.0, 1.0, 1.0),
(0.1, 1.0, 1.0), # red
(0.4, 1.0, 1.0), # violet
(1.0, 0.0, 0.0)), # blue
'green': ((0.0, 0.0, 0.0),
(1.0, 0.0, 0.0)),
'blue': ((0.0, 0.0, 0.0),
(0.1, 0.0, 0.0), # red
(0.4, 1.0, 1.0), # violet
(1.0, 1.0, 0.0)) # blue
}
とはいえ
cdict
形式は多くの柔軟性を与えてくれますが、私は単純な
グラデーションの場合、その形式はかなり直感的ではありません。以下は、それを助けるユーティリティ関数です。
単純なLinearSegmentedColormapsを生成するためのユーティリティ関数です。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
def make_colormap(seq):
"""Return a LinearSegmentedColormap
seq: a sequence of floats and RGB-tuples. The floats should be increasing
and in the interval (0,1).
"""
seq = [(None,) * 3, 0.0] + list(seq) + [1.0, (None,) * 3]
cdict = {'red': [], 'green': [], 'blue': []}
for i, item in enumerate(seq):
if isinstance(item, float):
r1, g1, b1 = seq[i - 1]
r2, g2, b2 = seq[i + 1]
cdict['red'].append([item, r1, r2])
cdict['green'].append([item, g1, g2])
cdict['blue'].append([item, b1, b2])
return mcolors.LinearSegmentedColormap('CustomMap', cdict)
c = mcolors.ColorConverter().to_rgb
rvb = make_colormap(
[c('red'), c('violet'), 0.33, c('violet'), c('blue'), 0.66, c('blue')])
N = 1000
array_dg = np.random.uniform(0, 10, size=(N, 2))
colors = np.random.uniform(-2, 2, size=(N,))
plt.scatter(array_dg[:, 0], array_dg[:, 1], c=colors, cmap=rvb)
plt.colorbar()
plt.show()
<イグ
ちなみに
for-loop
for i in range(0, len(array_dg)):
plt.plot(array_dg[i], markers.next(),alpha=alpha[i], c=colors.next())
を呼び出すごとに1点ずつプロットします。
plt.plot
. これは少数の点では動作しますが、多数の点では非常に遅くなります。
plt.plot
は1色でしか描画できませんが
plt.scatter
は各ドットに異なる色を割り当てることができます。このように
plt.scatter
がお勧めです。
関連
-
[解決済み] matplotlib のカラーマップを反転させる
-
[解決済み] matplotlib でプロットをクリアするために cla()、clf() または close() をいつ使うか?
-
[解決済み] Matplotlibでプロットを表示するのではなく、画像ファイルに保存する。
-
[解決済み] IPythonノートブックmatplotlibプロットをインラインで行う方法
-
[解決済み] matplotlib のプロットで xticks を除去しますか?
-
[解決済み】Matplotlibで図のタイトルと軸ラベルのフォントサイズを設定するには?
-
[解決済み] matplotlib のプロットでフォントサイズを変更する方法
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] Pythonのインスタンス変数とクラス変数
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 前月の日時オブジェクトを返す
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] Pythonのargparseを使った隠し引数の作成
-
[解決済み] あるオブジェクトが数であるかどうかを確認する、最もパイソン的な方法は何でしょうか?
-
[解決済み] Jupyter (IPython)ノートブックのセッションをpickleして保存する方法
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] Python Empty Generator 関数
-
[解決済み] if 節の終了方法
-
[解決済み] Pythonでリストが空かどうかをチェックする方法は?重複