Python

Seabornとは?pipインストールと使い方・Matplotlibとの違い【0.13.2対応】

Seabornとは?pipインストールと使い方・Matplotlibとの違い【0.13.2対応】

Seaborn(シーボーン)は、Matplotlibの上に作られたPythonの統計可視化ライブラリです。pandasのDataFrameを渡すだけで、散布図・ヒストグラム・箱ひげ図・ヒートマップなどを1〜2行で描けます。この記事では、Seabornとは何か、pip install seaborn で何が入るか、最初のグラフの描き方と関数の選び方までを解説します。最新版0.13.2を、2026年10月時点で最新のpandas 3.1・Matplotlib 3.11と組み合わせて動かした結果も載せています。

まとめ:Seabornの要点

  • Seabornとは:Matplotlibをラップした統計グラフ専用のライブラリ。集計・信頼区間・回帰直線を関数の中で計算して描く。
  • インストール:pip install seaborn。numpy・pandas・matplotlibも自動で入る。scipyとstatsmodelsが要る機能は pip install "seaborn[stats]"。
  • 最新版:0.13.2(2024年1月25日公開)。以降のリリースは無く、2026年10月時点でもこれが最新。
  • 使い方の型:import seaborn as sns のあと sns.関数名(data=df, x="列名", y="列名")。仕上げはMatplotlibで行う。
  • 最新環境での注意:pandas 3.1・Matplotlib 3.11でも描画はできるが、箱ひげ図はMatplotlib 3.13で削除予定の引数を使っている。

Seabornとは:Matplotlibの上で統計グラフを描くライブラリ

Seabornは、作者のMichael Waskom氏が開発するオープンソースのライブラリで、PyPIの初版0.1は2013年10月に公開されました。描画そのものはMatplotlibが行い、Seabornは「どの値をどう集計して、どの図にするか」を受け持ちます。たとえば棒グラフの関数 barplot は、渡した生データからカテゴリごとの平均と95%信頼区間を計算してから描きます。Matplotlibで同じ図を作るなら、集計と誤差棒を自分で書くことになります。

データの受け渡しはpandasのDataFrameが基本です。列名を x=・y=・hue=(色分け)に指定するだけで、凡例や軸ラベルも列名から自動で付きます。中身の数値計算はNumPyが担っています。

読み方・名前の由来とsnsの意味

読みは「シーボーン」です。import seaborn as sns と書く理由について、公式FAQは「ライブラリの名前の由来への遠回しな参照だが、seaborn name spaceと考えてもよい」と答えています。米ドラマ『ザ・ホワイトハウス』の登場人物Samuel Norman Seaborn(頭文字がS.N.S.)が由来という説が広く知られていますが、公式FAQは人物名までは書いていません。import seaborn as sb でも動作は同じです。ただ公式ドキュメントも他の記事もsnsで書かれているので、合わせておくとコードを読み比べやすくなります。

Matplotlibとの違いと使い分け

Matplotlibが線や軸といった部品を1つずつ組み立てる道具だとすると、Seabornは統計の決まった図をまとめて出す道具です。両者は置き換えではなく、Seabornで描いてMatplotlibで整える関係です。

観点 Matplotlib Seaborn
代表的な入力 配列・リスト・DataFrame DataFrame+列名など
集計・信頼区間 自分で計算 関数内で計算
色分け・凡例 色・ラベルなどを指定 hue=から自動生成
既定の見た目 素の白背景 set_themeで整う
細かな配置 全部制御できる Matplotlibに任せる

選ばないほうがよい場面もはっきりしています。マウスで拡大・ホバーしたいWeb用のグラフならPlotlyやBokeh、センサー値のように毎秒更新する描画ならPyQtGraphのほうが向いています。部署で同じ指標を毎日見るなら、スクリプトでグラフを量産する代わりにBIツールの導入も選択肢になります。定期更新・権限管理・共有の要件と、導入・保守費用を比較して判断します。Seabornが強いのは、手元のデータを分析者が探索するとき(EDA)と、論文や報告書に載せる静的な統計グラフです。

Seabornのインストール手順(pip・conda・uv)

pip install seabornの依存パッケージとPython要件

pipなら次の1行です。

pip install seaborn

PyPI上の0.13.2の要件は、Python 3.8以上・numpy 1.20以上(1.24.0を除く)・pandas 1.2以上・matplotlib 3.4以上(3.6.1を除く)です。ただし依存ライブラリ側の新しい版はもっと新しいPythonを要求します。2026年10月27日にPython 3.13の空の仮想環境で実行すると、次の組み合わせが入りました。

パッケージ 入った版 その版のPython要件
seaborn 0.13.2 3.8以上
pandas 3.1.0 3.11以上
numpy 2.5.4 3.12以上
matplotlib 3.11.2 3.11以上

Python 3.8〜3.10では、pipは各Python版に対応するpandasやmatplotlibを選びます。ただし、OSや既存パッケージの制約によってはインストールに失敗する場合もあります。同じ pip install seaborn でも、Pythonの版で中身が変わる点は覚えておくと、チームで「自分の環境だけ動かない」ときの切り分けが速くなります。

seaborn[stats]による統計機能用の追加依存

scipyとstatsmodelsは任意依存で、通常の pip install seaborn では入りません。無いまま次の関数を呼ぶと、描画の途中ではなく呼び出し時点で止まります(seaborn 0.13.2で実測)。

呼び出し 必要なもの 無いときのエラー
sns.clustermap() scipy RuntimeError
regplot(lowess=True) statsmodels RuntimeError
regplot(logistic=True) statsmodels RuntimeError

カーネル密度推定の kdeplot と普通の回帰直線の regplot はscipy無しでも動きました。上の表の機能を使うなら、公式のインストール手順にある追加依存つきで入れます。zshでは角かっこがワイルドカード扱いになるため、引用符で囲みます。

pip install "seaborn[stats]"

conda・uv・Jupyterで入れる場合

Anaconda系の環境では、公式手順どおりconda-forgeから入れます。pipとcondaを同じ環境で混ぜると依存が壊れることがあるので、pipとcondaの使い分けを先に決めておきます。

conda install seaborn -c conda-forge

プロジェクトごとに依存を固定するならuvが手軽です。uv add seaborn で pyproject.toml とロックファイルに記録されます。

uv init sns-demo
cd sns-demo
uv add seaborn
uv run python -c "import seaborn as sns; print(sns.__version__)"

JupyterやGoogle Colabのセルでは !pip install seaborn より %pip install seaborn を使います。%pip は実行中のカーネルのPythonに入れるため、「入れたのにimportできない」というずれが起きません。

インストールの確認とバージョン確認

入ったかどうかは、使うPythonそのものでimportして確かめます。

python -c "import seaborn as sns; print(sns.__version__)"
python -m pip show seaborn

ModuleNotFoundError: No module named 'seaborn' が出る原因のほとんどは、pipが入れた先と実行しているPythonが別であることです。pip ではなく python -m pip install seaborn と書けば、今のPythonに確実に入ります。

Seabornの使い方:importから最初のグラフまで

付属のサンプルデータtipsで、色分けつきの散布図を描きます。

import seaborn as sns
import matplotlib.pyplot as plt

sns.set_theme(style="whitegrid")
tips = sns.load_dataset("tips")
ax = sns.scatterplot(data=tips, x="total_bill", y="tip", hue="day")
ax.set_title("Total bill vs tip")
plt.show()

ラベルを英語にしているのは、日本語がそのままでは文字化けするためです(対処は後述の日本語の章)。sns.set_theme() は見た目の既定値を整える関数で、旧名の sns.set() も同じ働きです。load_datasetはGitHubのseaborn-dataリポジトリからCSVを取ってくるため、初回はネット接続が要ります。取得したデータはキャッシュされ、置き場所は環境変数 SEABORN_DATA、無ければOSのキャッシュフォルダ(macOSなら ~/Library/Caches/seaborn)です。sns.get_dataset_names() で一覧を出すと、tips・iris・flights・penguins・titanicなど22種類が返りました。社内のネットワークで取得できない場合は、自分のDataFrameを渡せば同じ関数がそのまま使えます。

figure-level関数とaxes-level関数の違い

Seabornでつまずきやすいのが、関数が2種類あることです。公式の関数概要によると、scatterplot や histplot のようなaxes-level関数はMatplotlibのAxes1枚に描いてそのAxesを返します。一方、relplot・displot・catplot のfigure-level関数は図全体を作ってFacetGridを返し、col=・row= で条件ごとに図を並べられます。

戻り値が違うので、タイトルの付け方も変わります。figure-level関数の結果に ax.set_title() を書くとAttributeErrorになるため、次のように使い分けます。

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset("tips")

# axes-level:Axesが返る。既存のsubplotsにも描ける
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
sns.histplot(data=tips, x="total_bill", ax=axes[0])
sns.boxplot(data=tips, x="day", y="total_bill", ax=axes[1])
axes[0].set_title("Total bill")

# figure-level:FacetGridが返る。col=で昼と夜に分けて並べる
g = sns.relplot(data=tips, x="total_bill", y="tip", col="time", hue="day")
g.set_axis_labels("Total bill", "Tip")
g.figure.suptitle("Tip by time", y=1.03)
plt.show()

判断の基準は単純です。自分で組んだsubplotsの中に描きたいならaxes-level、条件ごとの比較図を1行で作りたいならfigure-levelを選びます。

Seabornで描ける主要グラフと関数の選び方

関数は「何を見たいか」で選びます。同じ目的のaxes-levelとfigure-levelが対になっています。

見たいもの axes-level figure-level
数値の分布 histplot・kdeplot displot
カテゴリ別の比較 boxplot・violinplot・barplot・countplot catplot
2変数の関係・推移 scatterplot・lineplot relplot
回帰直線 regplot lmplot
全変数の組み合わせ なし pairplot
行列・相関 heatmap clustermap

分布とカテゴリ別の比較

countplot はカテゴリの件数、boxplot は中央値と四分位、violinplot は分布の山の形まで見せます。0.13.0でカテゴリ系の関数は全面的に書き直され、hue を指定しなければ1色で描く仕様になりました。古い記事のように曜日ごとに色が変わらなくても、それは正常な動作です。

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset("tips")
fig, axes = plt.subplots(1, 3, figsize=(15, 4))
sns.histplot(data=tips, x="total_bill", bins=20, ax=axes[0])
sns.countplot(data=tips, x="day", ax=axes[1])
sns.violinplot(data=tips, x="day", y="total_bill", hue="sex", ax=axes[2])
plt.show()

2変数の関係と時系列の推移

lineplot は同じx値に複数の行があると平均を取り、95%信頼区間の帯を重ねます。flightsは1年に12か月分の行があるので、年ごとの平均線に帯が付きます。帯が要らなければ errorbar=None を渡します。pairplot は全数値列の組み合わせを一度に散布図にするので、相関がありそうな組の当たりを付けるのに使えます。

import seaborn as sns
import matplotlib.pyplot as plt

flights = sns.load_dataset("flights")
sns.lineplot(data=flights, x="year", y="passengers", errorbar=None)
plt.show()

sns.pairplot(sns.load_dataset("iris"), hue="species")
plt.show()

相関行列とピボットのヒートマップ

ヒートマップには行列の形のデータを渡します。ここでpandas側の変更に2つ引っかかります。文字列の列を含むDataFrameに corr() をそのまま呼ぶと、pandas 3.1では ValueError: could not convert string to float: 'Female' で止まるので numeric_only=True を付けます。pivot は位置引数を受け付けず、pivot("month", "year", "passengers") はTypeErrorになるため、index=・columns=・values= を書きます。

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset("tips")
corr = tips.corr(numeric_only=True)
sns.heatmap(corr, annot=True, cmap="coolwarm", vmin=-1, vmax=1)
plt.show()

flights = sns.load_dataset("flights")
matrix = flights.pivot(index="month", columns="year", values="passengers")
sns.heatmap(matrix, annot=True, fmt="d", cmap="YlGnBu")
plt.show()

最新のpandas 3.1・Matplotlib 3.11で0.13.2を動かした結果

0.13.2は2024年1月の公開で、その後pandasは3系、Matplotlibは3.11まで進みました。古いSeabornが新しい依存の上で動くのかを確かめるため、2026年10月27日にPython 3.13.14・pandas 3.1.0・NumPy 2.5.4・Matplotlib 3.11.2の環境で、この記事の関数を含む約30通りの呼び出しを実行しました。正常な使用例では描画が完了しました。非推奨の呼び出しや誤った引数指定も含め、警告・エラーが出たケースを次の6項目にまとめます。

呼び出し 結果 原因
boxplot・catplot(kind=”box”) MatplotlibDeprecationWarning vert引数が3.13で削除予定
seaborn.objectsのPlot Pandas4Warning copy引数の廃止予定
barplot(ci=95) FutureWarning ciはerrorbarへ移行
distplot() UserWarning 0.14.0で削除予定
tips.corr() ValueError 文字列列を含む
pivot()の位置引数 TypeError キーワード専用

今すぐ壊れるのは下の2つで、どちらもpandas側の書き方の問題です。注意したいのは1行目です。Matplotlib 3.11は箱ひげ図の vert=True/False を非推奨にし、3.13で削除すると警告しています。Seaborn 0.13.2の boxplot はこの引数を渡しているため、Matplotlib 3.13が出た時点で箱ひげ図が描けなくなる見込みです。GitHubの開発版(0.14.0.dev0)はMatplotlib 3.10以降で orientation を渡すよう修正済みですが、2026年10月時点でリリースはされていません。

この警告はDeprecationWarningの仲間なので、普通に python script.py で実行すると表示されず、python -W default script.py で初めて見えました。業務のスクリプトで箱ひげ図を使っているなら、Seabornの次の版が出るまで依存に matplotlib<3.13 の上限を書いておくのが安全です。distplot は0.11.0から、barplot・pointplot・lineplotの ci= は0.12.0から非推奨です。見つけたら、distplotは histplot・displot に、ci=は errorbar=("ci", 95) に書き換えます。

日本語の文字化けとset_themeの関係

タイトルや軸ラベルに日本語を入れると、四角い豆腐(□)になることがあります。Seabornならではの落とし穴は、sns.set_theme() がフォント設定を上書きする点です。日本語フォントを同梱したmatplotlib-fontja 1.1.0で検証すると、次のようになりました。

手順 font.familyの値 文字欠けの警告
import matplotlib_fontja の直後 IPAexGothic なし
そのあとsns.set_theme() sans-serif 7件
sns.set_theme(font=”IPAexGothic”) IPAexGothic 0件

日本語化のライブラリを先に読み込んでも、後からset_themeを呼ぶと既定のフォントに戻ります。set_themeの font= に日本語フォント名を渡すのが確実です。matplotlib-fontjaはSeabornの依存に含まれないため、先に python -m pip install matplotlib-fontja で入れておきます。

import matplotlib_fontja
import seaborn as sns

sns.set_theme(style="whitegrid", font="IPAexGothic")

OSに入っているフォントを使う方法やjapanize-matplotlibとの違いは、Matplotlibの日本語化の章で詳しく扱っています。

Seabornに関するよくある質問

Seabornは無料ですか?商用で使えますか?

無料で、商用利用もできます。ライセンスはBSDライセンス(3条項)で、社内ツールや製品に組み込めます。再配布時は著作権表示・条件・免責事項を保持し、プロジェクト名や貢献者名を許可なく製品の推奨・宣伝に使わないなど、ライセンスの条件を守ります。

作ったグラフを画像ファイルで保存するには?

axes-level関数なら plt.savefig("graph.png", dpi=150, bbox_inches="tight")、figure-level関数なら戻り値のFacetGridに g.savefig("graph.png") を呼びます。plt.show() のあとに保存すると白紙になる環境があるので、保存はshowより前に書きます。

seaborn.objectsとは何ですか?使うべきですか?

0.12.0で入った、so.Plot(df, x=..., y=...).add(so.Dot()) のように部品を重ねて図を組み立てる新しい書き方です。公式チュートリアルは「実験的で未完成だが、本格的な利用に耐える安定性はある」と説明しています。pandas 3.1では上の実測のとおり警告も出るため、互換性を優先するチームでは従来の関数APIを標準にしておくのが無難です。

Seabornの最新版に更新するには?

python -m pip install --upgrade seaborn を実行します。ただし2026年10月時点の最新は0.13.2なので、すでに0.13.2なら変化はありません。pandasやMatplotlibだけが新しくなって警告が出る場合は、上の実測表で原因を確かめてください。

Seabornだけ入れればMatplotlibの知識は不要ですか?

不要にはなりません。Seabornの図はMatplotlibのFigureとAxesの上に描かれるので、タイトル・軸範囲・凡例の位置・保存はMatplotlibの関数で行います。fig, ax = plt.subplots() と ax= の受け渡しだけは覚えておくと、Seabornの図を自由に並べられます。

関連記事

お気に入りに入れた記事の一覧

この記事は以下の記事からリンクされています

資料請求

今日のトレンド記事 直近 24 時間で、いつもより多く読まれている記事

  1. 2026.10.27 テックブログ Brotli 脆弱性:CVE-2026-111497の影響確認とNode.js・Python・.NETの更新手順
  2. 2026.10.28 テックブログ リンツ不正アクセス:314万件の対象確認とパスワード強制リセット後の対処
  3. 2026.10.27 テックブログ Joshin(ジョーシン)不正アクセス:最大600万件の対象とサブスク初期パスワードの対処
  4. 2026.10.29 テックブログ So-net情報漏洩:258万件の対象確認とメールのパスワード再設定、窓口の番号
  5. 2026.10.23 テックブログ Renta!はいつ再開?不正アクセスでメールアドレス等が流出したおそれ・再開時のパスワード再設定と運営側の対応

RELATED POSTS 関連記事

目次