Python
 Computer >> コンピューター >  >> プログラミング >> Python

Seabornの分布プロットで曲線の下の領域を塗りつぶす方法


Seabornの分布プロット(distribution plot)で曲線の下の領域を塗りつぶしたい場合は、distplot()メソッドとfill_between()メソッドを組み合わせることで簡単に実現できます。

手順

  • 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
  • データポイントのリストを作成します。
  • 観測データの一変量分布をプロットします。
  • fill_between()メソッドを使用して、曲線の下の領域を塗りつぶします。
  • 自動スケーリングのマージンを設定し、x=0、y=0とします。
  • show()メソッドで図を表示します。

コード例

import seaborn as sns
import scipy.stats as stats
import matplotlib.pyplot as plt

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

x = [2.0, 7.5, 9.0, 8.5]
ax = sns.distplot(x, fit_kws={"color": "red"}, kde=False, fit=stats.gamma, hist=None, label="label 1")
l1 = ax.lines[0]

x1 = l1.get_xydata()[:, 0]
y1 = l1.get_xydata()[:, 1]

ax.fill_between(x1, y1, color="red", alpha=0.3)
ax.margins(x=0, y=0)

plt.show()

ポイント解説

まず、sns.distplot()fit=stats.gammaを指定してガンマ分布のフィット曲線を描画します。kde=Falsehist=Noneとしているため、KDE曲線やヒストグラムは表示されず、フィット曲線のみが描かれます。

次に、ax.lines[0]から曲線オブジェクトを取得し、get_xydata()で曲線上のx座標とy座標のデータを抽出します。この座標データをfill_between()に渡すことで、曲線とx軸の間の領域がalpha=0.3の半透明の赤で塗りつぶされます。

最後にmargins(x=0, y=0)で軸周りの余白をゼロに設定し、グラフ全体をすっきりと仕上げています。

注意点

なお、distplot()は比較的新しいバージョンのSeabornでは非推奨(deprecated)となっており、今後はkdeplot()histplot()などの新APIの利用が推奨されています。ただし、fill_between()を使って曲線下部を塗りつぶすという基本的なアプローチ自体は、どのバージョンでも同様に活用できます。

出力結果

Seabornの分布プロットで曲線の下の領域を塗りつぶす方法Seabornの分布プロットで曲線の下の領域を塗りつぶす方法

  1. SeabornのKDEプロットで中央値を可視化する方法

    SeabornのKDE(カーネル密度推定)プロット上にデータの中央値を示すには、以下の手順で実現できます。KDEプロットは分布の形状を滑らかに表現しますが、そのままでは代表値が分かりにくいため、垂直線で中央値を重ねて描画すると分布の中心がひと目で把握できるようになります。手順図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。NumPyを使ってランダムなデータを作成します。作成したデータの中央値を計算します。kdeplot() を使って塗りつぶし付きのKDEプロットを描画します。axvline() メソッドを使って、中央値の位置に垂直線を引きます。show() メソッ

  2. SeabornでX軸の目盛り(x-ticks)の表示密度を減らす方法

    SeabornでX軸の目盛り(x-ticks)の表示密度を減らしたい場合、奇数番目の位置にあるラベルに対して set_visible(False) を設定する方法が有効です。この記事では、具体的な手順とサンプルコードをわかりやすく解説します。 手順 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。 X軸とY軸のキーを持つデータフレームを作成します。 barplot() メソッドを使用して、棒グラフで点推定値と信頼区間を表示します。 bar_plot.get_xticklabels() メソッドを反復処理し、index が偶数の場合はラベルを表示、奇数の場合は非表