Python学習講座

PythonエンジニアによるPython3学習支援サイト

matplotlib

matplotlib入門 散布図編1


Pythonで分析したデータを可視化する際、matplotlibというライブラリが便利です。何回かに分けてその使い方を説明しようと思います。

matplotlibとは?

matplotlibとはPythonのプロットライブラリの一つで、わずか数行のコードで、ヒストグラム、パワースペクトル、棒グラフ、 errorcharts 、散布図などを生成することができます。公式ページには「2Dのプロットライブラリ」と記述がありますが、実際に使ってみると、3次元のプロットも可能でした。プロット数が多くなると、Rと比較して重たい印象があります。


インストールについてですが、anacondaに予め入っているため、僕はそれを利用しています。pyenvを利用している場合、以下のコマンドでインストールできます。

pyenv install anaconda3-4.0.0

今日は散布図の基本です。matplotlibのpyplotを利用します。

適当に点をプロットしてみる

まずは適当に3点をプロットしてみましょう。pyplotはx、yそれぞれの座標のリストを指定します。
例えば、(1, 1)、(2, 1)、(3, 1)の3点をプロットしたい場合、x=[1, 2, 3]、y=[1, 1, 1]と2つリストを指定することになります。

from matplotlib import pyplot

# プロットする点を作成する
x = [1, 2, 3]
y = [1, 1, 1]

# 点をプロットする
pyplot.scatter(x, y,   c='b', label = 'test_data')

# 凡例を表示する
pyplot.legend()

# グラフのタイトルを設定する
pyplot.title("test_datas")

# 表示する
pyplot.show()

実行結果

十字矢印のアイコンをクリックすると、ドラッグアンドドロップでグラフの描画範囲を移動することができます。また、虫眼鏡のアイコンをクリックすると、グラフ上の範囲をマウスで矩形選択すると、その範囲を拡大することができます。
scatterメソッドの基本的な引数は以下のとおりです。

  • 第1引数:x軸の系列
  • 第2引数:y軸の系列
  • c:色
  • label:ラベル

cで指定できる色は以下の通りですが、color = '#eeefff'というふうにRGBでの指定も可能です。

  • b: blue
  • g: green
  • r: red
  • c: cyan
  • m: magenta
  • y: yellow
  • k: black
  • w: white

複数の系列をプロットしてみる

次に、複数の系列をプロットしてみます。といってもscatterを系列ごとに呼び出すだけです。

from matplotlib import pyplot
x1 = [1, 2, 3]
y1 = [1, 1, 1]
x2 = [1, 2, 3]
y2 = [2, 1, 0]

pyplot.scatter(x1, y1,   c='b', label = 'test_data')
pyplot.scatter(x2, y2,   c='r', label = 'test_data')
pyplot.legend()
pyplot.title("test_datas")
pyplot.show()

実行結果


2系列プロットされていることが解ると思います。複数系列をプロットする際、あとからプロットしたもので上からかぶさるため、プロット順序次第で同じデータでも見え方が変わってくることがあるので注意が必要です。

複数の系列を分割して表示する

最後に、一つのグラフを4つに分割して4系列表示させてみましょう。pyplot.subplotというメソッドを利用します。

from matplotlib import pyplot
x1 = [1, 2, 3]
y1 = [1, 1, 1]
x2 = [1, 2, 3]
y2 = [2, 2, 2]
x3 = [1, 2, 3]
y3 = [3, 2, 1]
x4 = [1, 2, 3]
y4 = [1, 2, 4]

pyplot.subplot(2,2,1)
pyplot.scatter(x1, y1,   c='b', label = 'test_data1')
pyplot.legend()
pyplot.title("test_datas")

pyplot.subplot(2,2,2)
pyplot.scatter(x2, y2,   c='r', label = 'test_data2')
pyplot.legend()
pyplot.title("test_datas")

pyplot.subplot(2,2,3)
pyplot.scatter(x3, y3,   c='g', label = 'test_data3')
pyplot.legend()
pyplot.title("test_datas")

pyplot.subplot(2,2,4)
pyplot.scatter(x4, y4,   c='k', label = 'test_data4')
pyplot.legend()
pyplot.title("test_datas")

pyplot.show()

実行結果

subplotの引数は以下のとおりです。

  • 第1引数:分割行数
  • 第2引数:分割列数
  • 第3引数:何番目

たとえば、pyplot.subplot(2,2,3)の場合、2x2に分割したうちの3番目、という風になります。何番目かは以下の順になります。
pyplot_sample_04

ざっくりと基本を書きました。次回は、見せ方の工夫について書きたいと思います。

-matplotlib
-