MENU
カタログクリップ
本ページはプロモーションを含みます。

棒グラフの色を条件によって変える3つの方法 [matplotlib]

2025 3/03
広告
matplotlib
2021年10月10日2025年3月3日

matplotlibの棒グラフで、値によって色を変える方法を紹介します。

目次

基本の色をつける方法

棒グラフAxes.barまたはAxes.barh関数で色を指定する方法は、次の2通りがあります。(pyplotでも同じです。)

  1. color引数にcolorまたはcolorのリストで指定する方法
  2. 関数の返り値であるpatches.Rectangleインスタンスにset_color()関数で指定する方法

colorを一つ指定する

import numpy as np
import matplotlib.pyplot as plt

X = np.arange(10) 
Y = np.random.uniform(0, 10, 10)

fig, ax = plt.subplots()
rect = ax.bar(X, Y, color='C1') # プロット時にcolor引数に色を指定
rect[3].set_color('C2') # 後から色を変える

fig.show()

colorをリストで指定する

色はリストでも指定できます。リストで指定すれば、棒グラフを循環色で色分けすることができます。

import numpy as np
import matplotlib.pyplot as plt

X = np.arange(10) 
Y = np.random.uniform(1, 10, 10)
color = ['C0', 'C1', 'C2', 'C3', 'C4'] # 色リスト。循環して使用される。

fig, ax = plt.subplots()
ax.bar(X, Y, color=color)

fig.show()

条件で色を変える方法

ここからが本題で、棒グラフの色を値を条件にして変えるには、プロット時にcolor引数で色を指定するのが簡単です。

ここでは、そのやり方を使って、条件で色を変える方法を紹介します。

colorのリストを簡単に作る方法

条件が1~2通りの簡単なものなら、colorのリストを [条件 for 変数 in データのリスト] 書法で作成するのが簡単です。

color = [('b' if i < 3 else 'r') for i in Y] # Yの各値iが、i<3のとき'b'、それ以外は'r'
# ['b', 'b', 'b', 'b', 'r', 'r', 'b', 'b', 'r', 'b']

条件を増やすにはelseの部分をネストしていきます。

color = [('b' if i < 3 else ('r' if i < 6 else 'g')) for i in Y] # i<3で'b'、3<=i<6で'r'、それ以外は'g'

このリストをbarプロット時にcolor引数に与えます。

import numpy as np
import matplotlib.pyplot as plt

X = np.arange(10) 
Y = np.random.uniform(0, 10, 10)
color = [('b' if i < 3 else ('r' if i < 6 else 'g')) for i in Y]

fig, ax = plt.subplots()
rect = ax.bar(X, Y, color=color)

fig.show()

予めデータを分ける方法

次の方法は、あらかじめデータを分けておいて、色別にプロットを行う方法です。プロットを別々に行うため、色以外のパラメーターも変更したいときには便利な方法です。

numpy.ma.masked_where()関数を使うと、条件外のデータをマスクすることができます。

Y1 = np.ma.masked_where(Y < 5, Y).filled(False) # 除外条件にあうところをFalse値に置換。5未満を除外: 5以上を選択
# array([5.12427514, 6.20905616, 8.74534582, 0.        , 0.        ,
#       7.66742156, 8.39159773, 0.        , 0.        , 8.5918611 ])

マスクしたデータをそれぞれの色でプロットすれば、色分けできます。プロット時に色以外のパラメーターも変更することができます。

import numpy as np
import matplotlib.pyplot as plt

X = np.arange(10) 
Y = np.random.uniform(0, 10, 10)

Y1 = np.ma.masked_where(Y < 5, Y).filled(False) #5未満を除外: 5以上を選択
Y2 = np.ma.masked_where(Y >= 5, Y).filled(False)

fig, ax = plt.subplots()
ax.bar(X, Y1, width=0.5, color='b') #5以上では、幅を0.5、色を'b'に
ax.bar(X, Y2, color='g')

fig.show()

条件を関数で記述する方法

条件を関数で指定する方法なら、より柔軟性のある条件を指定できます。複雑な条件のときにも、読みやすいコードになります。

  1. 値valueを受け取って、色値を返す関数colorを定義します。
  2. 組み込みのmap関数を用いて、color関数をYの各値に対して作用させて、colorのリストを作成します。
def color(value):
  return 'C1'

color = list(map(color, Y))
import numpy as np
import matplotlib.pyplot as plt

def color(value):
  if value > 7:
    return 'C1'
  elif value > 4:
    return 'C2'
  else:
    return 'C3'

X = np.arange(10) 
Y = np.random.uniform(0, 10, 10)
color = list(map(color, Y))

fig, ax = plt.subplots()
ax.bar(X, Y, color=color)

fig.show()

この記事の環境

# Google Colaboratory

import matplotlib
matplotlib.__version__
# '3.2.2'

import numpy
numpy.__version__
# '1.19.5'

Playgrounds

  • Google Colab
  • Github gist

まとめ

matplotlibの棒グラフで、値によって色を変える方法を紹介しました。

  • [関連記事] 棒グラフの様々な描き方 [matplotlib]
  • [関連記事] マイナス値のとき棒グラフの色を変える方法 [matplotlib]

参考

  • matplotlib.axes.Axes.bar
matplotlib

関連記事

  • クイックスタートガイド matplotlibドキュメント日本語訳
    2025年3月4日
  • colormapを取得する方法。 [matplotlib]
    2025年3月4日
  • colormapを自作する3つの方法。 [matplotlib]
    2025年3月4日
  • scatter(散布図)プロットでcolormapを使用する方法。[matplotlib]
    2025年3月4日
  • colormapの範囲指定方法・高度な正規化の方法。 [matplotlib]
    2025年3月4日
  • Colorbarを反転する2つの方法 [matplotlib]
    2025年3月4日
  • matplotlib で colormap を反転する2つの方法
    2025年3月4日
  • cmap(colormap)一覧と選び方・使用方法 [matplotlib]
    2025年3月4日
カテゴリー
  • コンピューター
    • gnuplot & eps
    • mac
    • matplotlib
    • wordpress
  • ホーム・家電
    • アイロン
    • オーディオ
    • オーラルケア
      • ジェットウォッシャー
      • 音波振動歯ブラシ
    • カメラ
    • カー用品
    • クリーナー
    • テレビ、レコーダー
    • ドアホン
    • メンズ美容家電
      • ラムダッシュ
    • ルンバ
    • 一覧比較
    • 工具
    • 浄水器
    • 温水洗浄便座
    • 炊飯器
    • 空気清浄機・加除湿機
    • 空調・季節家電
    • 美容家電
      • フェイスケア
      • ヘアケア
      • ボディーケア
    • 血圧計
    • 調理器具
    • 電子レンジ
  • 健康
  • 家事
    • パン
    • 料理
    • 育児
    • 食品
      • おせち
      • コーヒー
  • 書籍
  • 知識
  • 趣味
    • ペン字
    • ロードバイク・クロスバイク
    • 車
    • 鉄道模型
    • 電子工作
サイト内検索
最近の投稿
  • モナークHGとモナークM7の4つの違い。[ニコン双眼鏡]
  • ニコン モナーク M7とM5の4つの違い。[双眼鏡]
  • Speed Wi-Fi DOCK 5G 01の実機使用レビュー。
  • RZ-760、GT-760、ST-760の違い。[ガス缶・CB缶]
  • RZ-730、RZ-730S、RZ-730SBK、RZ-730SWH、ST-Y450の違い。
  • TC-EA35WとTC-E123SBKの違いを比較。[スティッククリーナー]
  1. ホーム
  2. コンピューター
  3. matplotlib
  4. 棒グラフの色を条件によって変える3つの方法 [matplotlib]
  • ホーム
  • プライバシーポリシー

© カタログクリップ
contact@beiznotes.org

目次