matplotlibで色(color)を指定する方法を解説

Python

matplotlibで色を指定する方法は複数あり、適切な方法を選ぶことでグラフのがより見やすくなります。本記事では、matplotlibで色を指定する様々な方法と、グラフの各要素に色を適用する方法を解説します。

色を指定可能な箇所

matplotlibでは、グラフの様々な要素に色を指定できます。

プロット要素の色指定

プロット要素には、線、マーカー、塗りつぶし、テキスト、エラーバーなどがあります。これらの要素に色を指定する方法は、以下のように異なります。

プロット要素ごとの色指定方法を以下の表にまとめます。

要素色指定パラメータ説明
colorまたはc線の色を指定します
マーカーmarkerfacecolor markeredgecolorマーカーの塗りつぶし色と輪郭色を指定します
塗りつぶしcolor棒グラフや円グラフなどの塗りつぶし色を指定します
テキストcolorテキストの色を指定します
エラーバーecolorエラーバーの色を指定します

以下のコードは、異なる色の3つの線をプロットする例です。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
fig, ax = plt.subplots()

# 赤色の線をプロット
ax.plot(x, np.sin(x), color='red', label='red')
# 青色の線をプロット
ax.plot(x, np.sin(x+1), c='blue', label='blue')
# 緑色の線をプロット
ax.plot(x, np.sin(x+2), color='#00FF00', label='green')

ax.legend()
plt.title('different colors of lines')
plt.show()
# 出力: 赤、青、緑の3つの正弦波が表示される

以下のコードは、異なる色のマーカーを使用する例です。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 10)
y = np.sin(x)

fig, ax = plt.subplots()
# マーカーの塗りつぶし色を赤、輪郭を黒に設定
ax.plot(x, y, marker='o', markerfacecolor='red', markeredgecolor='black', 
        linestyle='none', markersize=10)

plt.title('marker facecolor and edgecolor')
plt.show()
# 出力: 赤色で塗りつぶされ、黒い輪郭を持つ円形マーカーが表示される

以下のコードは、異なる色で塗りつぶされた棒グラフの例です。

import matplotlib.pyplot as plt
import numpy as np

categories = ['A', 'B', 'C', 'D']
values = [3, 7, 2, 5]
colors = ['skyblue', 'lightgreen', 'salmon', 'plum']

fig, ax = plt.subplots()
# 各棒に異なる色を指定
ax.bar(categories, values, color=colors)

plt.title('bar with different colors')
plt.show()
# 出力: 4つの棒がそれぞれ異なる色で表示される

以下のコードは、異なる色のテキストを表示する例です。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
# 赤色のテキスト
ax.text(0.2, 0.8, 'red', color='red', fontsize=15)
# 青色のテキスト
ax.text(0.2, 0.6, 'blue', color='blue', fontsize=15)
# 緑色のテキスト
ax.text(0.2, 0.4, 'green', color='green', fontsize=15)
# RGB値で指定した紫色のテキスト
ax.text(0.2, 0.2, 'purple', color=(0.5, 0, 0.5), fontsize=15)

ax.set_xlim(0, 1)
ax.set_ylim(0, 1)
ax.set_title('text with different colors')
plt.show()
# 出力: 異なる色の4つのテキストが表示される

以下のコードは、カスタム色のエラーバーを表示する例です。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 5)
y = np.sin(x)
error = np.random.rand(5) * 0.2

fig, ax = plt.subplots()
# 青い点と赤いエラーバーを表示
ax.errorbar(x, y, yerr=error, fmt='o', color='blue', 
            ecolor='red', elinewidth=2, capsize=5)

plt.title('error bars with different colors')
plt.show()
# 出力: 青い点と赤いエラーバーが表示される

グラフ構成要素の色指定

グラフ構成要素には、軸、グリッド線、タイトル、ラベル、凡例、背景などがあります。これらの要素に色を指定する方法は、以下のように異なります。

グラフ構成要素ごとの色指定方法を以下の表にまとめます。

要素色指定パラメータ説明
set_color<br>spines[位置].set_color軸や枠線の色を指定します
グリッド線gridcolorグリッド線の色を指定します
タイトルset_titlecolorタイトルの色を指定します
ラベルset_xlabel/set_ylabelcolor軸ラベルの色を指定します
凡例legendlabelcolor凡例テキストの色を指定します
背景set_facecolorグラフや図の背景色を指定します

以下のコードは、軸の色をカスタマイズする例です。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

fig, ax = plt.subplots()
ax.plot(x, y)

# x軸の色を赤に設定
ax.spines['bottom'].set_color('red')
# y軸の色を青に設定
ax.spines['left'].set_color('blue')
# 上部の枠線を緑に設定
ax.spines['top'].set_color('green')
# 右側の枠線を紫に設定
ax.spines['right'].set_color('purple')

# 目盛りの色を設定
ax.tick_params(axis='x', colors='red')
ax.tick_params(axis='y', colors='blue')

plt.title('カスタム色の軸')
plt.show()
# 出力: 異なる色の軸と目盛りを持つグラフが表示される

以下のコードは、カスタム色のグリッド線を表示する例です。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

fig, ax = plt.subplots()
ax.plot(x, y)

# x軸方向のグリッド線を赤色で表示
ax.grid(axis='y', color='red', linestyle='-', linewidth=0.5, alpha=0.7)
# y軸方向のグリッド線を青色で表示
ax.grid(axis='x', color='blue', linestyle='-', linewidth=0.5, alpha=0.7)

plt.title('カスタム色のグリッド線')
plt.show()
# 出力: 赤と青のグリッド線を持つグラフが表示される

以下のコードは、カスタム色のタイトルを表示する例です。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

fig, ax = plt.subplots()
ax.plot(x, y)

# 赤色のタイトルを設定
ax.set_title('赤色のタイトル', color='red', fontsize=15)

plt.show()
# 出力: 赤色のタイトルを持つグラフが表示される

以下のコードは、カスタム色の軸ラベルを表示する例です。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

fig, ax = plt.subplots()
ax.plot(x, y)

# 青色のx軸ラベルを設定
ax.set_xlabel('X軸', color='blue', fontsize=12)
# 緑色のy軸ラベルを設定
ax.set_ylabel('Y軸', color='green', fontsize=12)

plt.title('カスタム色の軸ラベル')
plt.show()
# 出力: 青色のX軸ラベルと緑色のY軸ラベルを持つグラフが表示される

以下のコードは、カスタム色の凡例を表示する例です。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)

fig, ax = plt.subplots()
ax.plot(x, np.sin(x), label='sin(x)')
ax.plot(x, np.cos(x), label='cos(x)')

# 赤色の凡例テキストを設定
ax.legend(labelcolor='red')

plt.title('カスタム色の凡例')
plt.show()
# 出力: 赤色のテキストを持つ凡例が表示される

以下のコードは、カスタム背景色を設定する例です。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

fig, ax = plt.subplots()
ax.plot(x, y, color='white')

# 軸の背景色を暗い灰色に設定
ax.set_facecolor('#333333')
# 図全体の背景色を薄い灰色に設定
fig.set_facecolor('#DDDDDD')

plt.title('カスタム背景色', color='white')
plt.show()
# 出力: 暗い灰色の軸背景と薄い灰色の図背景を持つグラフが表示される

色の指定方法

matplotlibでは、様々な方法で色を指定できます。

名前付き色

matplotlibは多数の名前付き色を提供しています。

以下のコードは、名前付き色を使用する例です。

import matplotlib.pyplot as plt
import numpy as np

# 一般的な名前付き色のリスト
colors = ['red', 'blue', 'green', 'yellow', 'purple', 
          'orange', 'cyan', 'magenta', 'brown', 'pink']

fig, ax = plt.subplots(figsize=(10, 6))
for i, color in enumerate(colors):
    # 各色のサンプルを表示
    ax.bar(i, 1, color=color, width=0.7)
    ax.text(i, 0.5, color, ha='center', va='center', rotation=90)

ax.set_xticks([])
ax.set_yticks([])
plt.title('matplotlibの名前付き色')
plt.show()
# 出力: 10種類の名前付き色のサンプルが表示される

matplotlibで使用可能な名前付き色の完全なリストは、matplotlib.colors.TABLEAU_COLORSmatplotlib.colors.CSS4_COLORSなどで確認できます。

短縮色コード

基本色は1文字の短縮コードでも指定できます。

以下のコードは、短縮色コードを使用する例です。

import matplotlib.pyplot as plt
import numpy as np

# 短縮色コードとその意味
short_codes = {'b': 'blue', 'g': 'green', 'r': 'red', 
               'c': 'cyan', 'm': 'magenta', 'y': 'yellow', 
               'k': 'black', 'w': 'white'}

fig, ax = plt.subplots(figsize=(10, 6))
for i, (code, name) in enumerate(short_codes.items()):
    # 各短縮コードの色サンプルを表示
    ax.bar(i, 1, color=code, width=0.7)
    ax.text(i, 0.5, f'{code}: {name}', ha='center', va='center', 
            rotation=90, color='white' if code in ['k', 'b', 'g', 'r', 'm'] else 'black')

ax.set_xticks([])
ax.set_yticks([])
plt.title('matplotlibの短縮色コード')
plt.show()
# 出力: 8種類の短縮色コードとその色のサンプルが表示される

16進数コード

HTMLと同様の16進数カラーコードを使用できます。

以下のコードは、16進数カラーコードを使用する例です。

import matplotlib.pyplot as plt
import numpy as np

# 16進数カラーコードの例
hex_codes = ['#FF0000', '#00FF00', '#0000FF', '#FFFF00', 
             '#FF00FF', '#00FFFF', '#FF8000', '#8000FF']

fig, ax = plt.subplots(figsize=(10, 6))
for i, code in enumerate(hex_codes):
    # 各16進数コードの色サンプルを表示
    ax.bar(i, 1, color=code, width=0.7)
    ax.text(i, 0.5, code, ha='center', va='center', 
            rotation=90, color='white' if i in [2, 6, 7] else 'black')

ax.set_xticks([])
ax.set_yticks([])
plt.title('16進数カラーコード')
plt.show()
# 出力: 8種類の16進数カラーコードとその色のサンプルが表示される

RGB/RGBA値

RGB値(赤、緑、青)またはRGBA値(赤、緑、青、透明度)をタプルで指定できます。

以下のコードは、RGB/RGBA値を使用する例です。

import matplotlib.pyplot as plt
import numpy as np

# RGB値とRGBA値の例
colors = [
    (1, 0, 0),       # 赤
    (0, 1, 0),       # 緑
    (0, 0, 1),       # 青
    (1, 1, 0),       # 黄
    (1, 0, 1),       # マゼンタ
    (0, 1, 1),       # シアン
    (0.5, 0.5, 0.5), # グレー
    (1, 0, 0, 0.5)   # 半透明の赤
]

labels = ['(1,0,0)', '(0,1,0)', '(0,0,1)', '(1,1,0)', 
          '(1,0,1)', '(0,1,1)', '(0.5,0.5,0.5)', '(1,0,0,0.5)']

fig, ax = plt.subplots(figsize=(10, 6))
for i, (color, label) in enumerate(zip(colors, labels)):
    # 各RGB/RGBA値の色サンプルを表示
    ax.bar(i, 1, color=color, width=0.7)
    ax.text(i, 0.5, label, ha='center', va='center', 
            rotation=90, color='white' if i in [2, 6] else 'black')

ax.set_xticks([])
ax.set_yticks([])
plt.title('RGB/RGBA値による色指定')
plt.show()
# 出力: 8種類のRGB/RGBA値とその色のサンプルが表示される

グレースケール値

0(黒)から1(白)までの浮動小数点数でグレースケールを指定できます。

以下のコードは、グレースケール値を使用する例です。

import matplotlib.pyplot as plt
import numpy as np

# グレースケール値の例
grays = [0, 0.2, 0.4, 0.6, 0.8, 1.0]

fig, ax = plt.subplots(figsize=(10, 6))
for i, gray in enumerate(grays):
    # 各グレースケール値の色サンプルを表示
    ax.bar(i, 1, color=str(gray), width=0.7)
    ax.text(i, 0.5, str(gray), ha='center', va='center', 
            rotation=90, color='white' if i < 3 else 'black')

ax.set_xticks([])
ax.set_yticks([])
plt.title('sample of grayscale values')
plt.show()
# 出力: 6種類のグレースケール値とその色のサンプルが表示される

カラーマップ

カラーマップを使用して、データ値に基づいて色を割り当てることができます。

以下のコードは、カラーマップを使用する例です。

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

# 一般的なカラーマップのリスト
cmaps = ['viridis', 'plasma', 'inferno', 'magma', 'cividis', 
         'Spectral', 'coolwarm', 'bwr', 'seismic', 'rainbow']

fig, axs = plt.subplots(len(cmaps), 1, figsize=(10, 12))
fig.subplots_adjust(hspace=0.4)

for i, cmap_name in enumerate(cmaps):
    # 各カラーマップのグラデーションを表示
    cmap = cm.get_cmap(cmap_name)
    gradient = np.linspace(0, 1, 256).reshape(1, -1)
    axs[i].imshow(gradient, aspect='auto', cmap=cmap)
    axs[i].text(128, 0, cmap_name, ha='center', va='center', fontsize=10)
    axs[i].set_xticks([])
    axs[i].set_yticks([])

plt.suptitle('matplotlibのカラーマップ')
plt.show()
# 出力: 10種類のカラーマップのグラデーションが表示される

カラーマップを使用して散布図の点に色を付ける例です。

import matplotlib.pyplot as plt
import numpy as np

# ランダムなデータポイントを生成
np.random.seed(42)
x = np.random.rand(100)
y = np.random.rand(100)
colors = np.random.rand(100)  # 色の値

fig, ax = plt.subplots()
# カラーマップ'viridis'を使用して点に色を付ける
scatter = ax.scatter(x, y, c=colors, cmap='viridis', 
                    s=100, alpha=0.8)

# カラーバーを追加
cbar = plt.colorbar(scatter)
cbar.set_label('値')

plt.title('カラーマップを使用した散布図')
plt.show()
# 出力: カラーマップに基づいて色付けされた散布図が表示される

まとめ

matplotlibでは複数の方法で色を指定でき、グラフの様々な要素に色を適用できます。本記事で解説した内容をまとめます。

色を指定できる主な要素

  • プロット要素:線、マーカー、塗りつぶし、テキスト、エラーバー
  • グラフ構成要素:軸、グリッド線、タイトル、ラベル、凡例、背景

色の指定方法

  • 名前付き色:red、blueなど直感的に使える色名
  • 短縮色コード:r、bなど1文字で指定できる基本色
  • 16進数コード:#FF0000などHTMLと同様の16進数表記
  • RGB/RGBA値:(1, 0, 0)や(1, 0, 0, 0.5)などのタプル形式
  • グレースケール値:0(黒)から1(白)までの数値
  • カラーマップ:viridis、plasmaなどのグラデーションパターン

適切な色指定方法を選ぶことで、データの視認性を高め、情報をより効果的に伝えるグラフを作成できます。特にデータの種類や量に応じて、単色、複数色、カラーマップなどを使い分けることが重要です。

タイトルとURLをコピーしました