Python

Seabornを使ってきれいなグラフを作る方法

By 2021年9月14日No Comments

この記事では、Python外部ライブラリであるSeabornを使って、きれいなグラフを作る方法について解説していきます。

データの可視化は、物事や事象を大まかに、あるいは緻密に捉えるのに必要な要素です。「グラフ作るならMatplotlibでいいんじゃないの」と思われるかもしれませんが、Seabornを使うことでより洗練され、かつシンプルなコードでグラフを描くことができます。ぜひこの記事を読んで使い方を理解しましょう。

プログラミング初心者対象!Python入門セミナー

プログラミング初心者がPythonの初歩部分を突破するためのセミナーです。

Seabornとは

seabornは、Pythonのデータを可視化するために使われるライブラリです。手軽にきれいなグラフを描画できる機能が沢山用意されているので、今までmatplotlibで頑張って作っていたグラフも、Seabornの関数を使えばあっという間にできてしまうかもしれません。

Seabornは外部ライブラリなので、インストールする必要があります。Anacondaを使っている人はcondaコマンドを使って、それ以外の人はpipを使ってインストールしましょう。

conda install seaborn
pip install seaborn

実際にMatplotlibを使ってグラフを描画したときとSeabornを使ったときの違いを見てみましょう。まずはMatplotlibを使ったグラフです。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# グラフを作るための準備
rn = np.random.RandomState(0)
x = np.linspace(0, 10, 50)
y = np.cumsum(rn.randn(50, 6), 0)

plt.plot(x, y) # グラフをプロットします。
plt.legend('abcdef', loc='upper left') # グラフに凡例をつけます。
plt.show() # グラフを画面に表示させます。

とてもシンプルな図が形成されました。続いてSeabornを使って同じグラフを作ってみます。Seabornは慣例的にsnsとしてインポートします。

import seaborn as sns
sns.set() # sns.set()を記述することでseabornの設定を使ってグラフを作れるようになります。

plt.plot(x, y)
plt.legend('abcdef', loc='upper left')
plt.show()

Matplotlibで作ったグラフに比べてスタイリッシュになりました。グラフ生成には乱数生成などの様々な関数を使いましたが、重要なのはsns.set()。これだけです。sns.set()でSeabornのデフォルトスタイルが適用され、いい感じのデザインにしてくれます。

Seabornを使ったグラフの設定

Seabornによってグラフのデザインを変える方法を見ていきましょう。

まず、sns.set=styleでグラフ全体のスタイルを設定します。

sns.set_style("ticks")
x = np.linspace(0, 10, 100)

plt.plot(x, x**2)
plt.plot(x, x**2 - 5 * x)
plt.plot(x, x**2 + 5 * x)
plt.show()

スタイルには以下の5つがあります。

・darkgrid: 背景が暗い。グリッド(グラフ内の方眼)あり。

・dark: 背景が暗い。グリッドなし。

・whitegrid: 背景が白。グリッドあり。

・white: 背景が白。グリッドなし。

・ticks: 背景が白。軸にグリッドあり。

上のグラフではstyle=”ticks”としています。

この他にもグラフの文字サイズを設定するset_contextや色を変更するsns.set_palette()などがありますが、最初の例で示したようにこれらはsns.set()でまとめて変更することができます。

sns.set(context='talk', style='whitegrid', palette='dark')plt.show()

Seabornはグラフをきれいに作るだけでなく、pandasのDataframeのデータを使ったグラフ化に長けています。

# pandasのDataframeを作成します。
df = pd.DataFrame({'A': np.random.rand(100),
                  'B': np.random.rand(100),
                  'C': np.random.rand(100)})
df.head() # dfの先頭のデータを表示させます。
#           A         B         C
# 0  0.054893  0.941071  0.191416
# 1  0.445699  0.743504  0.576971
# 2  0.866516  0.519901  0.270161
# 3  0.620122  0.507005  0.662409
# 4  0.209328  0.175454  0.847433
sns.set(style='darkgrid')
sns.scatterplot(x='A', y='B', data=df) # x軸にA、y軸にBとして散布図を生成します。
plt.show()

Seabornを使ったヒートマップの作り方

Seabornを使うと、2次元データを可視化できるヒートマップを簡単に作成することができます。ヒートマップは、2次元データのここの値を色や脳団として表現したグラフであり、色によって視覚的にデータを分析するために用いられます。

ヒートマップ作成にはseaborn.heatmapを使います。データ構造がnumpy配列の場合、以下のようになります。

array = np.arange(0, 25, 1).reshape((5, 5))
print(array)
# [[ 0  1  2  3  4]#  [ 5  6  7  8  9]#  [10 11 12 13 14]#  [15 16 17 18 19]#  [20 21 22 23 24]]
sns.heatmap(array)
plt.show()

pandas.Dataframeをグラフ化すると、行名のindex, 列名のcolumnsがラベルとして表示されます。

df = pd.DataFrame(data=array, index=['a', 'b', 'c', 'd', 'e'], columns=['A', 'B', 'C', 'D', 'E'])
print(df)

sns.heatmap(df)
plt.show()

まとめ

この記事では、Seabornとは何か、Seabornを使ったグラフの設定、ヒートマップの作り方について解説しました。Matplotlibを使ってきれいなグラフを作ることもできますが、Seabornを使うことでより簡潔にグラフの体裁を整えることができます。ぜひ、活用してみてください。

Udemyの動画学習でもPythonを勉強しよう!

「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!

UdemyのPythonおすすめ33講座レビューリスト
HOSL

Author HOSL

More posts by HOSL