Matplotlibで壊れた水平棒グラフ(broken barh)を作成する方法
Matplotlibでは、broken_barh()メソッドを使うことで、途中が途切れた水平棒グラフ(壊れた棒グラフ)を簡単に描画できます。この形式のグラフは、ガントチャートやタイムラインの可視化など、時間の経過に伴う区間データを表現する際に特に便利です。
以下の手順に従って作成できます。
- 図のサイズを設定し、サブプロット間および周囲の余白を調整します。
- 図(figure)とサブプロット(axes)のセットを作成します。
- 水平方向に並ぶ長方形の系列をプロットします。
- X軸・Y軸のスケール、X軸ラベル、Y目盛りおよびY目盛りラベルを設定します。
- グリッド線を有効化して見やすさを向上させます。
- annotate()メソッドを使用して、特定の位置を指し示すテキスト(注釈)を表示します。
- show()メソッドを呼び出して図を表示します。
コード例
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
fig, ax = plt.subplots()
ax.broken_barh([(110, 30), (150, 10)], (10, 9), facecolors='tab:blue')
ax.broken_barh([(10, 50), (100, 20), (130, 10)], (20, 9),
facecolors=('tab:orange', 'tab:green', 'tab:red'))
ax.set_ylim(5, 35)
ax.set_xlim(0, 200)
ax.set_xlabel('seconds since start')
ax.set_yticks([15, 25])
ax.set_yticklabels(['Bill', 'Jim'])
ax.grid(True)
ax.annotate('race interrupted', (61, 25),
xytext=(0.8, 0.9), textcoords='axes fraction',
arrowprops=dict(facecolor='black', shrink=0.05),
fontsize=16,
horizontalalignment='right', verticalalignment='top')
plt.show()コードのポイント
broken_barh()の第1引数には、各長方形の開始位置と幅をタプルのリストとして渡します。第2引数にはY方向の開始位置と高さを指定します。また、facecolors引数に色のタプルを渡すことで、長方形ごとに異なる色を割り当てることも可能です。
注釈部分では、xytextとtextcoords='axes fraction'を組み合わせることで、矢印の先端(データ座標上の点)とテキストの配置位置(Axesに対する相対座標)を柔軟に制御しています。
出力結果

実行すると、BillとJimそれぞれの走行時間帯が横棒として描画され、Jimの区間の中断箇所に「race interrupted」という注釈が矢印付きで表示されます。
-
Matplotlibで棒グラフのラベルに絵文字を表示する方法
Matplotlibでは、annotate()メソッドを使うことで、棒グラフの各バーの上部に絵文字をラベルとして簡単に配置できます。データの視覚化にアクセントを加えたい場合に便利なテクニックです。実装手順図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。頻度を表すリストfreqsと、絵文字を含むラベルのリストlabelsを作成します。figure()メソッドを使用して、新しい図を作成します。bar()メソッドで棒グラフを描画します。annotate()メソッドを使って、各バーの上に絵文字をラベルとして配置します。show()メソッドで図を表示します。コード例impo
-
Matplotlibで任意のデータを使って4Dプロットを作成する方法
Matplotlibでは、x・y・z の3つの座標データに加え、c(色) を第4の次元として割り当てることで、いわゆる「4Dプロット」を実現できます。これは実際には3D散布図にカラーマップを組み合わせたものであり、点の位置が3次元情報を、色がもう1つの変数を表現します。以下の手順に従うことで、標準正規分布に従うランダムなデータポイントを使った4Dプロットを簡単に作成できます。手順figure() メソッドを使用して、新しい図を作成するか、既存の図をアクティブ化します。サブプロット構成の一部として、3D投影(projection=3d)を指定した Axes を追加します。NumPy を使って x