こんにちは、すのくろです。
皆さんはエクセルやPythonのグラフ作成時に色について困ったことはないでしょうか?
例えば、
・デフォルトの色がいかにもという形でダサい
・自分で考えて変更するのも面倒
などなどです。
意外と細かいところなのですが、少し気になって編集を始めると作業も意外と多く時間や脳のリソースを取られる気がしませんか?笑
そこで今回はPythonのmatplotlibライブラリで「plt.get_cmap」を使ったカラーマップ(cmap)を使用して、少し設定を変えるだけで色の組み合わせがきれいなグラフを作成する際のノウハウについて解説します!
カラーマップの使い方や種類を紹介して、カラフルで見やすいグラフの作成方法の例を紹介します。
それでは、早速やっていきましょう!
カラーマップとは?
カラーマップとは、連続した色のグラデーションを表す色のセットです。グラフの視認性を向上させるために使用され、高低差を表現するヒートマップなどにも用いられます。
Matplotlibには、いくつかの事前定義されたカラーマップがあります。
実際には↓のようなものになります。
plt.get_cmapとは?
plt.get_cmapとは、matplotlib.pyplotモジュールで提供されている関数の1つで、カラーマップを取得するために使用されます。
カラーマップは、グラフの色を定義するために使用され、グラデーションやヒートマップなどの作成に役立ちます。
plt.get_cmapを使用するには、matplotlib.pyplotモジュールをインポートし、cmap変数にカラーマップの名前を指定します。
例えば下記のコードで「cool」というカラーマップを設定できます。
cm = plt.get_cmap("cool")
cm
このカラーマップの左端から右端までの中から場所を選んで色をチョイスしていくイメージです。
plt.get_cmapの基本的な使い方
先ほど述べたように、plt.get_cmapを使用して、cmap変数にカラーマップの名前を指定することができました。
次に、プロットにcmap変数を適用することで、指定のカラーマップを適用することができます。
ここで、よくつまづく注意点ですが、普段利用することが多いplt.plot()にはcmapの引数はないので、colorを使って一つ一つの線の色を決定する必要があります。
手作業で色を指定するわけではなく、カラーマップに対応したRGBAを取得します。こちらの具体的な方法については後ほど解説します。
plt.get_cmapで利用可能なカラーマップの種類一覧
plt.get_cmapを使用すると、Matplotlibで使用可能なカラーマップの種類を取得することができます。
以下は、plt.get_cmapで利用可能なカラーマップ例の一部です。
- cool
- jet
- spring
- summer
- autumn
- winter
matplotlibの公式ドキュメントには、get_cmap関数で使用可能なカラーマップの一覧が掲載されています。以下がそのリンクになります。
このページでは、カラーマップの例を多数掲載しており、それぞれのカラーマップがどのような色を持っているか、どのような効果があるかが詳細に説明されています。
また、カラーマップの種類によっては、カラーマップの名前やパラメータを指定することで、カスタマイズすることもできます。
このページを参照することで、使用可能なカラーマップの種類や、それぞれのカラーマップがどのような効果を持っているかを理解することができます。
カラーマップの選び方のポイント
カラーマップの選び方には、以下のポイントがあります。
①視認性、②対象とするデータの種類、③色の効果
①視認性
グラフのデータを視覚的に表現するために、色を使います。色の選択は、データの特性に合わせて行わなければなりません。
例えば、グラフのデータに正負の値が含まれる場合は、青を負の値、赤を正の値に対応させるなど、分かりやすい色を選択する必要があります。
②対象とするデータの種類
データの種類によって、最適なカラーマップが異なります。
例えば、数値の大小関係を強調したい場合は、ヒートマップに適したviridisを使うことが多いです。
③色の効果
色には感情や印象を与える力があります。
そのため、グラフを見た際にどのような印象を与えるかも考慮する必要があります。
以下に代表的な色の印象を簡単に載せておくので参考にしていただければ幸いです。
色 | 印象 |
赤 | 熱、情熱、力、危険、注意 |
オレンジ | 活力、元気、温かさ、陽気、軽快 |
黄 | 喜び、明るさ、知性、希望、注意 |
緑 | 自然、安心、成長、健康、平和 |
青 | 知性、安定、信頼、クール、慎重 |
紫 | 神秘、高貴、精神、ロマンチック、未知 |
黒 | 威厳、不気味、シック、重厚、権威 |
白 | 無垢、純粋、清潔、無邪気、真実 |
グレー | 中立、堅実、冷静、高級、無表情 |
ブラウン | 土、信頼、温かさ、安定、地味 |
実例:カラーマップを使ったグラフ作成
以下は、plt.get_cmapを使用してカラーマップを適用したグラフの例です。
plt.plot()に使う場合
まずは最も使うであろうplt.plot()で指定のカラーマップを使う方法です。
上記でも述べましたが、ここで、よくつまづく注意点として普段利用することが多いplt.plot()にはcmapの引数はないので、colorを使って一つ一つの線の色を決定する必要があります。
下記がその例のコードです。
# グラフ装飾用カラー
cm = plt.get_cmap("cool")
# グラフ用データの作成
x = np.arange(1, 101)
y = x*x
plt.plot(x, y, color=cm(1))
plt.xlabel("x [-]")
plt.ylabel("y [-]")
plt.mesh:3Dマップ(メッシュ)
次に3次元的なグラフで
# データの生成
x = np.linspace(-10, 10, 100)
y = np.linspace(-10, 10, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X ** 2 + Y ** 2))
# カラーマップの適用
cmap = plt.get_cmap('cool')
plt.pcolormesh(X, Y, Z, cmap=cmap)
# カラーバーの追加
plt.colorbar()
# グラフのタイトル・ラベルの追加
plt.title('Sin Wave')
plt.xlabel('X')
plt.ylabel('Y')
# グラフの表示
plt.show()
この例では、pcolormesh関数を使用して、xとyのメッシュグリッド上でZをプロットしています。
カラーマップとして’cool’を指定し、カラーバーを追加しています。グラフのタイトル・ラベルも追加し、最終的にshow()関数を呼び出してグラフを表示しています。
LinearSegmentedColormapを使った自作カラーマップの作成方法
plt.get_cmapを使用することで、既存のカラーマップを取得するだけでなく、新しいカラーマップを作成することもできます。
新しいカラーマップを作成するには、LinearSegmentedColormapクラスを使用します。
from matplotlib.colors import LinearSegmentedColormap
colors = [(1, 0, 0), (0, 1, 0), (0, 0, 1)] # 赤、緑、青
cmap_name = 'my_colors'
cm = LinearSegmentedColormap.from_list(cmap_name, colors, N=10)
cm
上記のコードは、新しいカスタムカラーマップを作成するためのサンプルコードです。
赤色が最小値、青色が最大値を表すようなカラーマップを作成し、データの分布を可視化することができます。
このコードでは、LinearSegmentedColormapオブジェクトを使用して、3つの基本色(赤、緑、青)から10色のカスタムカラーマップを作成しています。
変数名colorsは、基本色のリストであり、各色の値は、RGB(赤、緑、青)値で表されます。
また、変数名cmap_nameは、新しいカスタムカラーマップの名前であり、変数名cmには、LinearSegmentedColormapオブジェクトが格納されます。
このようにカスタムカラーマップを使用すると、カラーマップを作成する場合によく使用される既存のカラーマップとは異なる、独自の色の組み合わせを定義することができます!
たとえば、特定の色のテーマに合わせたカラーマップを作成する場合に便利です。
このコードの実行結果は、カスタムカラーマップが変数cmに格納されるというもので、それを使用してグラフを作成することができます。
下記コードは、今回作成した独自のカラーマップを使用した棒グラフを描画するためのサンプルコードです。
# 自作したカラーマップでグラフの作成
for i in range(1, 11):
plt.bar(i, i*10, color=cm(i))
plt.xlabel("x [-]")
plt.ylabel("y [-]")
このコードでは、ループを使用して1から10までの整数を生成し、適当に棒グラフを作成しました。
各棒の色は、自作のカスタムカラーマップcmを使用して設定されています。
plt.bar関数のcolor引数にcm(i)を指定することで、各棒の色をカスタムカラーマップの色に対応させています。
このように、自作のカスタムカラーマップを使用することで、データをわかりやすく視覚化することができます!
まとめ
以上のように、plt.get_cmapを使用することで、Matplotlibのカラーマップを取得することができます。カラーマップの選び方には、視認性やデータの種類、色の効果などを考慮する必要があります。
また、カスタムカラーマップを作成することも簡単にできることがわかったかと思いますので、
皆さんも自分好みのカラーマップを一度作っておいて、今後のグラフ作成に活かしていただけば幸いです!
より、Pythonのスキルを高めて、効率的に業務を遂行したい、高度なPythonを中心としたプログラミングをより体系的に学びたいと言う方向けに、おすすめのオンラインスクールを2つ厳選して紹介していますので、こちらもよければご覧ください!
自分も一度体系的にPythonを学んだことで、一気に日々の業務や人生が変わったと感じています!
以上、ここまでお読みいただき、ありがとうございました!
コメント