Pythonでカラーグラデーションを作成するには?質問する

Pythonでカラーグラデーションを作成するには?質問する

緑と青(あるいは他の 2 色)を補間する新しいカラーマップを作成したいと考えています。目標は次のようなものを作成することです。勾配

まず、青と緑の線形補間でこれができるかどうかはよくわかりません。できるとしても、どうすればよいかわかりません。特定のRGB値を補間するmatplotlibメソッドの使用に関するドキュメントを見つけました。ここ

本当の問題は、以下の「cdict2」がどのように動作するかを理解することです。この例について、ドキュメントには次のように書かれています。

「例: 下半分では赤を 0 から 1 に増加させ、中半分では緑を同様に増加させ、上半分では青を増加させたいとします。その場合は、次のように使用します。」

from matplotlib import pyplot as plt
import matplotlib 
import numpy as np

plt.figure()
a=np.outer(np.arange(0,1,0.01),np.ones(10))
cdict2 = {'red':   [(0.0,  0.0, 0.0),
                   (0.5,  1.0, 1.0),
                   (1.0,  1.0, 1.0)],
         'green': [(0.0,  0.0, 0.0),
                   (0.25, 0.0, 0.0),
                   (0.75, 1.0, 1.0),
                   (1.0,  1.0, 1.0)],
         'blue':  [(0.0,  0.0, 0.0),
                   (0.5,  0.0, 0.0),
                   (1.0,  1.0, 1.0)]} 
my_cmap2 = matplotlib.colors.LinearSegmentedColormap('my_colormap2',cdict2,256)
plt.imshow(a,aspect='auto', cmap =my_cmap2)                   
plt.show()

編集: 補間がどのように機能するかがわかりました。たとえば、次のようにすると赤から白への補間が行われます。

白から赤: 各色の「マトリックス」の列を下っていくと、列 1 には補間の開始と終了の x 座標があり、他の 2 つの列にはその座標における色の値の実際の値があります。

cdict2 = {'red':   [(0.0,  1.0, 1.0),
                    (1.0,  1.0, 1.0),
                    (1.0,  1.0, 1.0)],
         'green': [(0.0,  1.0, 1.0),
                   (1.0, 0.0, 0.0),
                   (1.0,  0.0, 0.0)],
     'blue':  [(0.0,  1.0, 1.0),
               (1.0,  0.0, 0.0),
               (1.0,  0.0, 0.0)]} 

私が望むグラデーションを RGB 空間で補間して作成するのは非常に難しいことは明らかです...

ベストアンサー1

私がまだ見たことのない簡単な答えは、カラーパッケージ

pip経由でインストール

pip install colour

次のように使用します。

from colour import Color
red = Color("red")
colors = list(red.range_to(Color("green"),10))
    
# colors is now a list of length 10
# Containing: 
# [<Color red>, <Color #f13600>, <Color #e36500>, <Color #d58e00>, <Color #c7b000>, <Color #a4b800>, <Color #72aa00>, <Color #459c00>, <Color #208e00>, <Color green>]

入力を任意の色に変更します。@zeluspが指摘しているように、これによりない2色のみの滑らかな組み合わせに制限されます(たとえば、赤から青への組み合わせでは、中央に黄色と緑があります)。しかし、賛成票を見ると、多くの人がこれを便利な近似値だと考えていることは明らかです。

おすすめ記事