EnsekiTT Blog

EnsekiTTが書くブログです。

どれが何のデータか確認するために、Plotlyを使うことにしてみた話

つまりなにしたの?

Matplotlibを使っていたら、量が多いとScatterでプロットしたものの、どれがどのデータなのかわからなくなって困っていた。
そこで、インタラクティブなプロットができるPlotlyを使ってみることにした。
f:id:ensekitt:20180531013541j:plain

Plotlyとは?

PlotlyのPythonグラフ作成ライブラリは、インタラクティブで高品質のグラフをオンラインで作成してくれる。
ただ、どうやらオフラインで使えるPlotlyもあるみたいで今回はそれをHydrogen上で使ってみた。
Jupyter Notebook や Jupyter Labでもできる。

やってみる

狙いとしては、Scatterでプロットしたあとに、「あれ、この点何番目のデータだろう?」って
見られるようにする。

オフラインモードのPlotlyを用意する。

import plotly.offline as offline
import plotly.graph_objs as go
offline.init_notebook_mode()

データを用意する

おなじみのあやめを使う。

from sklearn.datasets import load_iris
import pandas as pd
iris = load_iris()
columns = iris.feature_names
df = pd.DataFrame(iris.data, columns=columns)
df['iris_num'] = iris.target
df['names'] = iris.target_names[iris.target]
df['names_with_id'] = df.index.astype(str).str.cat(df['names'], sep=', ')

最後に、インデックスとあやめの種類を繋げた系列を作った。
各点にマウスオーバーしたときにこの文字列が出てくるようにしたい。

TraceとLayoutを用意する

trace = go.Scatter(
        x = df[columns[0]],
        y = df[columns[1]],
        marker = dict(color=df['iris_num']),
        text = df['names_with_id'],
        mode = "markers")

layout = go.Layout(
        title='Iris sepal length-width',
        xaxis=dict(title='sepal legth(cm)'),
        yaxis=dict(title='sepal width(cm)'),
        showlegend=False)

Plotする

data = [trace]
fig = dict(data=data, layout=layout)

offline.iplot(fig, filename="Iris", image="png")

f:id:ensekitt:20180531013251p:plain
マウスオーバーしたときにあやめの種類とインデックスが出せた。

クリエイティブ・コモンズ・ライセンス
この 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。