Python

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

はじめに

本記事の内容について

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

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

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

【plotlyチュートリアル】<<第1回>>折れ線グラフ はじめに 作成する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")

ABOUT ME
Mickey@コーヒー好きエンジニア
【コーヒー×科学×AI×ものづくり】趣味は①家庭用ロースターで自家焙煎コーヒー作り②アプリ開発です。 Wordpressブログ、note、Instagramやっています♪ ブログでは自家焙煎の実例や実践的なプログラミングの例文紹介、noteではコーヒーの海外論文(主に焙煎理論)やAIに関する情報の発信をしています。