まずは蝋の翼から。

学んだことを書きながら確認・整理するためのメモブログ。こういうことなのかな?といったことをふわっと書いたりしていますが、理解が浅いゆえに的はずれなことも多々あると思うのでツッコミ歓迎

plotly expressを試す

plotly expressとは

可視化ライブラリplotlyのラッパー。

plotlyはグラフに対してドラッグ選択すると拡大ができたり、マウスポインタを合わせると詳細な数値をポップアップしてくれる。
そのplotlyをより簡単に記載することができるのがplotly express

plotly.com

細かいことをする場合はseabornに軍配が上がるが、pandas.plotのように簡単にささっと可視化したいときは便利だしpandas.plotよりもキレイなのでpandas.plotの置き換えとして学ぶと良いかもしれない。pandas.plot並に学習コストが低いし。

可視化

import

plotlypxとする。

px.xxxのxxx部分で各グラフ要素となるメソッド(scatterなど)を使い、datra, x軸, y軸を指定。そのまま引数として、colorなど詳細も指定するだけで簡単にグラフが作成できる。

import plotly.express as px
import pandas as pd

散布図

plotly.com

fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species",
                 size='petal_length', hover_data=['petal_width'])
fig

f:id:chito_ng:20200525063407p:plain

y軸の境界(marginal_y)に密度分布(箱ひげ図的なもの、名称不明)、x軸の境界(marginal_x)にhistgramをくっつける

fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species", marginal_y="rug", marginal_x="histogram")
fig

f:id:chito_ng:20200525063334p:plain

y軸の境界(marginal_y)にヴァイオリン、x軸の境界(marginal_x)に箱ひげをくっつける

fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species",
                 marginal_y="violin", marginal_x="box")
fig

f:id:chito_ng:20200525063308p:plain

category_ordersで軸の分割(Rのggplotでいうfacet_grid)。辞書を渡す。

df = px.data.tips()
fig = px.scatter(df, x="total_bill", y="tip", facet_row="time", facet_col="day", color="smoker",
          category_orders={"day": ["Thur", "Fri", "Sat", "Sun"], "time": ["Lunch", "Dinner"]})
fig

f:id:chito_ng:20200525063829p:plain

scatter_matrixで全変数の組み合わせで可視化してくれる。

df = px.data.iris()
fig = px.scatter_matrix(df)
fig

f:id:chito_ng:20200525064153p:plain

df = px.data.iris()
fig = px.scatter_matrix(df, dimensions=["sepal_width", "sepal_length", "petal_width", "petal_length"], color="species")
fig

f:id:chito_ng:20200525064224p:plain

animation_frameを指定するとアニメーションができる。

df = px.data.gapminder()
fig = px.scatter(df, x="gdpPercap", y="lifeExp", animation_frame="year",
           size="pop", color="continent", facet_col="continent",
           log_x=True, size_max=45, range_x=[100,100000], range_y=[25,90])
fig

f:id:chito_ng:20200525065856p:plain

plotly.com

余談

ドキュメントを読むと、引数trendlineで線が引けるはずだが、エラーが出る。。。

折れ線

plotly.com

df = px.data.gapminder().query("continent == 'Oceania'")
fig = px.line(df, x='year', y='lifeExp', color='country')
fig

f:id:chito_ng:20200525063436p:plain

他にもhistgramboxなど、基本的なものはあるが省略。
また、レイアウトもupdateでいじることはできるが、そのあたりまでやるときはseabornでやっている気がするので省略。

df = px.data.gapminder().query("continent == 'Oceania'")
fig = px.line(df, x='year', y='lifeExp', color='country')
fig.update_xaxes(title_text='西暦')
fig.update_yaxes(title_text='平均寿命')
fig

f:id:chito_ng:20200525070530p:plain

参考

matplotlibseabornplotly を比較している記事

qiita.com

公式APIリファレンス

plotly.com

plotly.com