Python

【plotlyレイアウト応用編】<>Facet and Trellis Plots活用

はじめに

本記事の内容について

plotlyレイアウト応用編ではグラフの見せ方について実例を紹介しながら学べる講座になります。

本内容はplotlyチュートリアルにおけるFacet and Trellis Plotsの内容ですが、グラフはオリジナルなものも紹介しますので、チュートリアルを一通り目を通した方にも参考になればと思います。

コードの詳細は省きながら重要な部分のみ紹介するので、これからplotlyを始める方には下記記事を事前に読んで理解してから本記事を読むことをおすすめします。

【plotlyチュートリアル】>折れ線グラフ はじめに 作成する3種類の折れ線グラフについて 本記事ではPythonのグラフライブラリとして使えるplotlyによる「折...

解説するグラフについて

①基本的なfacet_row(行分割)の使い方
②基本的なfacet_col(列分割)の使い方
③facetとcategory_ordersの使い方
④ユニークなデータ全てをグラフ化
⑤plotly.graph_objects(go)を使う場合

5種のグラフを解説

①基本的なfacet_row(行分割)の使い方

使用するライブラリをインポートします。

import plotly.express as px
import plotly.io as pio

データはplotly内で用意されているgapminderを使用し、大陸はオセアニアに絞ります。

plotly_expressのpx.lineでx、yを指定し、facet_row=’country’とすることでオセアニアの中にある国別に行方向に分割されたグラフが得られます。

ポイントはfacet_rowではx軸の値が共通になることです。

pio.write_htmlでhtmlファイルとして下記のように保存できます。

df = px.data.gapminder().query("continent=='Oceania'")
fig = px.line(df, x="year", y="lifeExp", facet_row='country')
fig.show()
pio.write_html(fig,file="./L1-1.html")

②基本的なfacet_col(列分割)の使い方

引き続きplotly内で用意されているgapminderを使用しますが、大陸はオセアニア以外に絞ります。

xとy軸は①と同様ですが、color=’country’として色(系列)に国名を使います。

また、facet_col=’continent’とすることで大陸名ごとに列方向に分割されたグラフが得られます。

ポイントはfacet_colではy軸の値が共通になることです。

showlegend=Falseは系列名を表示しないを意味しています。

df = px.data.gapminder().query("continent !='Oceania' & continent !='Americas' & continent !='Europe'")
fig = px.line(df, x="year", y="lifeExp", color='country',facet_col='continent')
fig.update_layout(showlegend=False)
fig.show()
pio.write_html(fig,file="./L1-2.html")

③facetとcategory_ordersの使い方

category_ordersではfacet_colとfacet_rowで指定した内容の順番について決めることができます。

文字列で指定した場合に使う機会が多いです。

df = px.data.tips()
fig = px.bar(df, x="sex", y="total_bill", color="smoker", barmode="group", facet_row="time", facet_col="day",
       category_orders={"day": ["Thur", "Fri", "Sat", "Sun"], "time": ["Lunch", "Dinner"]})
fig.show()
pio.write_html(fig,file="./L1-3.html")

④ユニークなデータ全てをグラフ化

df = px.data.gapminder().query("continent == 'Asia'")

fig = px.line(df, x="year", y="gdpPercap", facet_col="country", facet_col_wrap=7,
              height=600, width=800,
              title="国民一人あたりのGDP(アジア諸国)")
fig.for_each_annotation(lambda a: a.update(text=a.text.split("=")[-1]))
fig.update_yaxes(showticklabels=True)
fig.update_layout(
    margin=dict(l=0, r=0, t=80, b=20),
    paper_bgcolor="rgb(10,92,173,0.05)",
)
fig.show()
pio.write_html(fig,file="./L1-4.html")

Plotlyに関する書籍紹介

↓Plotlyについて学べる数少ない参考書です。

Mickey@コーヒー好きエンジニア

【製造業×プログラミング×AI】Python/VBAを活用した業務改善、Streamlit/Plotlyを活用したWebアプリ開発について初心者向けに発信中|趣味は自家焙煎コーヒー作り|noteでは焙煎理論を発信|ココナラではプログラミングに関する相談,就職/転職やコーヒーに関する相談などのサービスをやっています