Python製可視化ライブラリBokehBokehロゴを使って、散布図(scatter plot)を作成する例を紹介します。データには、有名なiris(アヤメ)データを使用します。

BokehのGitHubリポジトリで公開されているサンプルコードをベースにしています。

備考

Bokehやそのドキュメント等のライセンスについては、「Bokehのライセンス」に記載しています。

1.   前提としている環境

この記事では、下記の環境を前提としています。

  • Python : Ver.3.5.2
  • Bokeh : Ver.0.12.6

2.   実行するコードと結果のグラフ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
from bokeh.plotting import figure, show, output_file
from bokeh.sampledata.iris import flowers

colormap = {'setosa': 'red', 'versicolor': 'green', 'virginica': 'blue'}
colors = [colormap[x] for x in flowers['species']]

p = figure(title = "Iris Morphology")
p.xaxis.axis_label = 'Petal Length'
p.yaxis.axis_label = 'Petal Width'

p.circle(flowers["petal_length"], flowers["petal_width"],
         color=colors, fill_alpha=0.2, size=10)

output_file("iris.html", title="iris.py example")

show(p)

3.   解説

3.1.   必要なモジュールのインポート

1行目では、必要なモジュールのインポートをしています。

1
from bokeh.plotting import figure, show, output_file

3.2.   サンプルデータのインポート

2行目では、サンプルデータをインポートしています。

2
from bokeh.sampledata.iris import flowers

type(flowers)を実行してみると分かりますが、flowersはpandasのDataFrameオブジェクトです。150行のrowと5列のcolumnからできています。

sepal_length sepal_width petal_length petal_width species
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
4 5.0 3.6 1.4 0.2 setosa
... ... ... ... ... ...
145 6.7 3.0 5.2 2.3 virginica
146 6.3 2.5 5.0 1.9 virginica
147 6.5 3.0 5.2 2.0 virginica
148 6.2 3.4 5.4 2.3 virginica
149 5.9 3.0 5.1 1.8 virginica

150 rows × 5 columns

sepalは花のがく片、petalは花弁のことで、それぞれの幅と長さのデータがcolumnになっています。このデータは、Edgar AndersonとRonald Aylmer Fisherの研究によって発表された有名なデータです[1]。speciesカラムにはアヤメの種類を表す文字列(setosa、versicolor、virginica)が入っています。

3.3.   アヤメの品種ごとに色を設定する

3、4行目では、リストの内包表記を使って150行分の色名が入ったリストcolorsを作成しています。

4
5
colormap = {'setosa': 'red', 'versicolor': 'green', 'virginica': 'blue'}
colors = [colormap[x] for x in flowers['species']]

colorsの中身は、['red', 'red', ... 'green', 'green', ... 'blue', 'blue']のようにred、green、blueのいずれかの色名が、全部で150要素並んでいます。

アヤメの品種がsetosaの場合は赤、versicolorの場合は緑、virginicaの場合は青を指定しています。

3.4.   Figureオブジェクトを作成

7行目では、Figureオブジェクトを作成しています。引数にはグラフのタイトルを渡しています。

7
p = figure(title = "Iris Morphology")

3.5.   X・Y軸のラベルを設定

8、9行目では、X軸とY軸のラベルを設定しています。これらは、7行目でfigureの引数として渡して設定することもできます。

8
9
p.xaxis.axis_label = 'Petal Length'
p.yaxis.axis_label = 'Petal Width'

3.6.   プロット

11行目で、Figureオブジェクトに円をプロットしています。

11
12
p.circle(flowers["petal_length"], flowers["petal_width"],
         color=colors, fill_alpha=0.2, size=10)

3.7.   HTMLファイルに出力

14行目でファイル名とタイトルを指定して、16行目で出力しています。

14
15
16
output_file("iris.html", title="iris.py example")

show(p)