YutaKaのPython教室

Python の文法やライブラリ、API、環境構築について画像・動画・ソースコード付きで徹底解説!

matplotlib color 色の指定方法 | 超簡単な一文字指定からカラーマップの使い方まで

matplotlibでの色の指定方法について紹介していきます。

  • ちょっとしたグラフ化の時に便利な一文字指定の方法から
  • グラフでグラデーションを表現したいときに便利なカラーマップの使い方まで

サンプルコード付きで解説していきます!

グラフ、テキストの色の指定方法 color = color

pyplot.plot()でグラフを描く際やplt.text()でテキストを表示する際には、colorで色の指定を行うことができます。

pyplot.plot()plt.text()の色の指定方法についてサンプルコードを見てみましょう。

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
 
# サインカーブを用意
x = np.linspace(0,np.pi*2)
y = np.sin(x)
 
# 緑色のサインカーブを描く
plt.plot(x, y, color = "green")
# 青字でテキストを表示
plt.text(np.pi, 0, "sine curve", size = "x-large", color = "blue")

キーワード引数colorを指定する方法には次のようなものがあります:

  • 一文字(色の名前の頭文字)で指定
  • 色の名前で指定
  • RGBで指定
  • 16進数カラーコードで指定
  • カラーマップで指定

以下では、これらについて紹介していきます。

【超簡単】一文字指定(色の頭文字)

最も簡単な色指定の方法です。

使用できる色は次の8色に限定されますが、ちょっとしたグラフの可視化に重宝します。

短縮文字名 色名(英語) 色名(日本語)
b blue
g green
r red
c cyan シアン
m magenta 赤紫
y yellow 黄色
k black 黒(これだけ頭文字ではない)
w white

plt.plot()を例に一文字で色を指定する例を見てみましょう。

# 曲線を用意
x = np.linspace(0,np.pi*2)
y = np.sin(x)
y2 = np.cos(x)
 
# 緑色のサインカーブを描く
plt.plot(x, y, color = "g")
 
# 赤色のコサインカーブを描く
plt.plot(x, y2, "r") # color=を省略することもできる

plt.plot()の使い方については、以下の記事で解説しているので、参考にしてみて下さい。

≫Matplotlib plt.plot徹底解説 | 基本操作を総まとめ!
Matplotlibのplt.plotを使用したグラフを作成、グラフの見た目変更、タイトルや軸の設定など基本事項について徹底解説!!この記事を読めば、plt.plotで手軽に手早く簡単に、キレイなグラフ作成可能に!?
www.yutaka-note.com/entry/matplotlib_pyplot
 

一文字指定できる色を全て表示してみます。

color_dict = {
    'b': 'blue',
    'g': 'green',
    'r': 'red', 
    'c': 'cyan',
    'm': 'magenta',
    'y': 'yellow',
    'k': 'black',
    'w': 'white'
}
 
# 軸を非表示
plt.xticks([])
plt.yticks([])
 
color_list = list(color_dict)
for i, color in enumerate(color_list):
    x = [0, 1]
    y = [i, i+1]
    plt.plot(x, y, color = color)
    plt.text(0, i+0.2, color_dict[color])

これらの一文字指定だけでも、かなりの状況に対応できますね。

色の名前で指定

colorに色の名前を与えて、色を指定することもできます。

指定できる色の種類は、次の公式ドキュメントでサンプル付きで紹介されています。

あまりに多くて覚えるのは現実的ではないですが、英語で色の名前を入力すればだいたい使えます。

# 曲線を用意
x = np.linspace(0,np.pi*2)
y = np.sin(x)
y2 = np.cos(x)
y3 = -np.sin(x)
y4 = -np.cos(x)
 
# ピンクのサインカーブを描く
plt.plot(x, y, color = "pink")
 
# 紫赤色のコサインカーブを描く
plt.plot(x, y2, color = "purple")
 
# 青色のサインカーブを描く
plt.plot(x, y3, color = "blue")
 
# 金色のコサインカーブを描く
plt.plot(x, y4, "gold")

RGB、RGBAで指定

RGB形式で色を指定することもできます。

  • color = (R, G, B)
  • RGBの強度は、それぞれ0~1の範囲

また、4つ目の要素として透明度アルファ, Aを指定することもできます。

  • color = (R, G, B, A)
    • A = 0 ⇒ 完全透明
    • A = 1 ⇒ 完全不透明

RGBおよびRGBAで指定する例を見てみましょう。

# 曲線を用意
x = np.linspace(0,np.pi*2)
y = np.sin(x)
y2 = np.cos(x)
y3 = -np.sin(x)
y4 = -np.cos(x)
 
# 赤⇒(R,G,B)=(1,0,0)
color = (1,0,0)
plt.plot(x, y, color = color)
 
# 赤(透明度50%)⇒(R,G,B, alpha)=(1,0,0,0.5)
color = (1,0,0,0.5)
plt.plot(x, y2, color = color)
 
# 青⇒(R,G,B)=(0,0,1)
color = (0,0,1)
plt.plot(x, y3, color = color)
 
# 青(透明度50%)⇒(R,G,B, alpha)=(0,0,1,0.5)
color = (0,0,1,0.5)
plt.plot(x, y4, color = color)

RGB指定は、Microsoft オフィスと色を合わせるなど細かい設定で便利です。

16進数カラーコードで指定

16進数のカラーコードを使用することもできます。

colorに文字列でカラーコードを与えましょう。

  • color = " カラーコード"

カラーコードで色を指定してみましょう。

# 曲線を用意
x = np.linspace(0,np.pi*2)
y = np.sin(x)
y2 = np.cos(x)
 
# ライトグリーン 
color = "#90ee90"
plt.plot(x, y, color = color)
 
# ブラウン
color = "#a52a2a"
plt.plot(x, y2, color = color)

カラーコードの検索はウェブ上に便利なサイトがたくさんあります。

グレースケールで指定

matplotlibには、グレースケールで色を指定する特別な方法が用意されています。

0~1の間の数字を文字列で与えると、グレースケールの濃淡を指定できます。

  • color = "0" ⇒ 黒
  • color = "0.5" ⇒ 灰色
  • color = "1" ⇒ 白

0.1刻みでグレースケールの出力例を確認してみます。

# 軸ラベルを消す 
plt.xticks([])
plt.yticks([])
 
for i in range(11):
    gray_scale = str(i /10)
    x = [i, i+1]
    plt.plot(x, x, color = gray_scale)
    plt.text(x[0], x[1], gray_scale)

簡単にグレースケールを使用できるので、白黒印刷のときに便利な機能です。

【簡単グラデーション】カラーマップで指定

matplotlibには、デフォルトで多数のカラーマップが用意されています。

カラーマップというのは、特定の色の組み合わせのセットです。

例えば、次のようなものがあります。

  • Blues:薄い青から濃い青に変化するセット
  • Resds:薄い赤から濃い赤に変化するセット
  • cool:寒色系から暖色系に変化するセット
  • Spectral:虹のように赤 ⇒ オレンジ ⇒ 黄色 ⇒ 緑 ⇒ 青 ⇒ 紫と変化するセット

この他にも様々なカラーマップがあります。必要に応じて公式ドキュメントで確認してみてください。

カラーマップの使用方法:

  • カラーマップインスタンス生成:cm = plt.get_cmap("カラーマップ名")
  • 0~1の範囲でカラーマップ値を指定してcolorに与える:color = cm(x)

以下で、サンプルコードを紹介します。

# 軸ラベルを消す 
plt.xticks([])
plt.yticks([])
 
# カラーマップインスタンス生成
cm = plt.get_cmap("Blues")
 
# プロット作成
for i in range(11):
    z = i /10
    x = [i, i+1]
    plt.plot(x, x, color = cm(z))
    plt.text(x[0], x[1], z)

# 軸ラベルを消す 
plt.xticks([])
plt.yticks([])
 
# カラーマップインスタンス生成
cm = plt.get_cmap("Reds")
 
# プロット作成
for i in range(11):
    z = i /10
    x = [i, i+1]
    plt.plot(x, x,"o", markersize = 20, color = cm(z))
    plt.text(x[0], x[1], z)

cm = plt.get_cmap("Spectral")
 
x = np.linspace(0, 2*np.pi)
for i in range(11):
    y = np.sin(x+np.pi*i/5)
    plt.plot(x, y, color = cm(i/10))

カラーマップを使えばキャッチーなグラフが簡単に作れそうですね!

カラーマップは散布図で、データの特徴量に応じて色を変えるときにも役立ちます。

次の記事で具体的な方法を解説しているので、参考にしてください。

≫Matplotlib 散布図を徹底解説!|基本設定からバブルチャートまで
Matplotlibで散布図を作成する方法がよくわからない…。散布図って何のためにあるの?全部、plt.plotでグラフ作ればよくない?という方のために、「Matplotlibの散布図の作成方法、散布図を応用したデータの可視化例」についてまとめしました!
www.yutaka-note.com/entry/matplotlib_scatter
 

様々な種類のグラフの色設定

各グラフの色設定用引数については、グラフ毎の記事で解説しています。

色設定をしたいグラフの記事を参考にしてみてください。

グラフの種類 plt.関数名() 解説記事
折れ線グラフ、プロット plt.plot() ≫【完全保存版】matplotlib pyplot徹底解説
棒グラフ、積み上げ棒グラフ plt.bar() ≫棒グラフを徹底解説|複数系列・積み上げ棒グラフ全てOK
円グラフ、ドーナツグラフ plt.pie() ≫円グラフ作成方法|Excel風グラフ、ドーナツグラフも解説
散布図、バブルチャート plt.scatter() ≫散布図を徹底解説!|基本設定からバブルチャートまで
ヒストグラム、累積分布関数 plt.hist() ≫ヒストグラム徹底攻略!|作成も見た目の設定も全解説
円や多角形などの図形 patches ≫Matplotlib 図形を描く方法|円や四角形の描き方をわかりやすく解説

オススメ|matplotlibとデータ分析の勉強方法

今回は、matplotlibの色設定に関して解説しました。。

matplotlibは奥の深いモジュールですが、なかなかわかりにくい部分もあります…。

そこで、グラフの作成方法、種類変更、凡例、タイトルの設定など網羅的にわかりやすく整理した記事を作りました。ぜひ参考にしてみてください。

≫【初心者向け】Matplotlibの特徴と使い方をわかりやすく解説!
脱初心者のためのMatplotlibマスターガイドです。そもそもどういう流れでプロットするのか?どんな種類のグラフが描けるのか?日本語設定は?タイトルや軸の設定は?オブジェクト指向って何?そんな疑問を解決します!この記事で、脱Matplotlib初心者を目指そう!
www.yutaka-note.com/entry/matplotlib_guid
 

また、データ分析初心者の方にはこちらの記事もおススメです。

私がこれまで勉強してきた経験をもとに考えたおススメの勉強本の紹介記事です。

何から始めて、どうやってレベルアップしていけばいいのか、初心者の方にぜひおススメしたい本を紹介しました。

≫独学でデータ分析を勉強するオススメ学習本
独学でのpythonデータ分析勉強に役立ったおススメ書籍を紹介していきます。業務でそれなりにデータ分析を行えるまで、いろいろな試行錯誤をしてきましたが、もし自分が今ゼロから勉強する立場ならどうするのがいいのか考えてみました。以下では、入門書、個別モジュール用、実践用の3つの視点でおススメ本を紹介していきます。
www.yutaka-note.com/entry/data_analysis