つまりなにしたの?
Matplotlibを使っていたら、量が多いとScatterでプロットしたものの、どれがどのデータなのかわからなくなって困っていた。
そこで、インタラクティブなプロットができるPlotlyを使ってみることにした。
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")
マウスオーバーしたときにあやめの種類とインデックスが出せた。