前回までの復習
公式サイトのサンプルソース。以下の2行目がデータの取得、3行目が加工、が4行目で円グラフの設定、5行目で描画をおこなっています。
import plotly.express as px
df = px.data.gapminder().query("year == 2007").query("continent == 'Europe'")
df.loc[df['pop'] < 2.e6, 'country'] = 'Other countries' # Represent only large countries
fig = px.pie(df, values='pop', names='country', title='Population of European continent')
fig.show()
3行目を実行した状態でdfのデータは以下のように加工されます。
country continent year lifeExp pop gdpPercap iso_alpha iso_num
23 Albania Europe 2007 76.423 3600523 5937.029526 ALB 8
83 Austria Europe 2007 79.829 8199783 36126.492700 AUT 40
119 Belgium Europe 2007 79.441 10392226 33692.605080 BEL 56
155 Bosnia and Herzegovina Europe 2007 74.852 4552198 7446.298803 BIH 70
191 Bulgaria Europe 2007 73.005 7322858 10680.792820 BGR 100
383 Croatia Europe 2007 75.748 4493312 14619.222720 HRV 191
407 Czech Republic Europe 2007 76.486 10228744 22833.308510 CZE 203
419 Denmark Europe 2007 78.332 5468120 35278.418740 DNK 208
527 Finland Europe 2007 79.313 5238460 33207.084400 FIN 246
539 France Europe 2007 80.657 61083916 30470.016700 FRA 250
575 Germany Europe 2007 79.406 82400996 32170.374420 DEU 276
599 Greece Europe 2007 79.483 10706290 27538.411880 GRC 300
683 Hungary Europe 2007 73.338 9956108 18008.944440 HUN 348
695 Other countries Europe 2007 81.757 301931 36180.789190 ISL 352
755 Ireland Europe 2007 78.885 4109086 40675.996350 IRL 372
779 Italy Europe 2007 80.546 58147733 28569.719700 ITA 380
1019 Other countries Europe 2007 74.543 684736 9253.896111 MNE 499
1091 Netherlands Europe 2007 79.762 16570613 36797.933320 NLD 528
1151 Norway Europe 2007 80.196 4627926 49357.190170 NOR 578
1235 Poland Europe 2007 75.563 38518241 15389.924680 POL 616
1247 Portugal Europe 2007 78.098 10642836 20509.647770 PRT 620
1283 Romania Europe 2007 72.476 22276056 10808.475610 ROU 642
1343 Serbia Europe 2007 74.002 10150265 9786.534714 SRB 688
1379 Slovak Republic Europe 2007 74.663 5447502 18678.314350 SVK 703
1391 Slovenia Europe 2007 77.926 2009245 25768.257590 SVN 705
1427 Spain Europe 2007 80.941 40448191 28821.063700 ESP 724
1475 Sweden Europe 2007 80.884 9031088 33859.748350 SWE 752
1487 Switzerland Europe 2007 81.701 7554661 37506.419070 CHE 756
1583 Turkey Europe 2007 71.777 71158647 8458.276384 TUR 792
1607 United Kingdom Europe 2007 79.425 60776238 33203.261280 GBR 826
4行目で円グラフで国(countory)ごとに人口(pop)を表示しグラフのタイトルを'Population of European continent'としています。
5行目でグラフを描画しています。その結果、以下の円グラフが描画されます。
↑目次
グラフ中に情報を表示する
グラフ中にはパーセンテージが表示されていますが、グラフの面積が小さい場合には線が引かれグラフ外に割合が表示されます。
このパーセンテージをすべてグラフの中に表示するようにします。
import plotly.express as px
df = px.data.gapminder().query("year == 2007").query("continent == 'Europe'")
df.loc[df['pop'] < 2.e6, 'country'] = 'Other countries' # Represent only large countries
fig = px.pie(df, values='pop', names='country', title='Population of European continent')
fig.update_traces(textposition='inside')
fig.show()
fig.show()の前にfig.update_tracesで設定を変更しますがここでtextposition='inside'を指定することですべての国の情報がグラフ中に表示されるようになります。
↑目次
フォントサイズを指定する
グラフの中に情報を表示すると文字が小さすぎて見えなくなることがあります。 update_layoutのuniformtext_minsizeを用いて文字の大きさを固定することができます。 またuniformtext_modeを用いて、文字が入らない場合の動作を指定することができます。どのようなモードを指定できるかは公式のuniformtextを参照してください。
import plotly.express as px
df = px.data.gapminder().query("year == 2007").query("continent == 'Europe'")
df.loc[df['pop'] < 2.e6, 'country'] = 'Other countries'
fig = px.pie(df, values='pop', names='country'
,title='Population of European continent')
fig.update_traces(textposition='inside')
fig.update_layout(uniformtext_minsize=12, uniformtext_mode='hide')
fig.show()
↑目次
グラフ中に表示する情報の変更
円グラフはデフォルトではテキストにパーセンテージのみを表示します。そこでラベル(ここでは国名)も一緒に表示してみます。
import plotly.express as px
df = px.data.gapminder().query("year == 2007").query("continent == 'Europe'")
df.loc[df['pop'] < 2.e6, 'country'] = 'Other countries' # Represent only large countries
fig = px.pie(df, values='pop', names='country', title='Population of European continent')
fig.update_traces(textinfo='percent+label')
fig.show()
fig.update_traces(textinfo='percent+label')の部分でパーセントだけでなくラベル(ここでは国名)を表示するようにします。
このようにラベル(国名)も一緒に表示されます。 ただし小さいグラフにむりやりラベルも表示させると文字が小さくなり見にくくなるため、 表示する情報は必要最小限が良いでしょう。 割合はだいたいで良いのであれば、パーセント表示はせずに国名(ラベル)のみの表示を考えても良いとおもいます。 その場合にはtextinfo='label'とします。
fig.update_traces(textinfo='label')
↑目次
ホバー時のラベルに情報を追加する
円グラフはホバー時(マウスをグラフの上に持ってきたとき)に表示される吹き出しの内容を変えることができます。 デフォルトでは以下のように円グラフ表示時にvaluesとnamesで指定した値を表示します。
ここでgdpPercap(一人当たりGDP)を吹き出しに表示するようにしてみます。また吹き出しのラベルを変更します。
吹き出しのラベルは以下のように変更します。
変更前 |
変更後 |
pop |
人口 |
country |
国名 |
gdpPercap |
一人当たりGDP |
import plotly.express as px
df = px.data.gapminder().query("year == 2007").query("continent == 'Europe'")
df.loc[df['pop'] < 2.e6, 'country'] = 'Other countries'
fig = px.pie(df, values='pop', names='country'
,title='Population of European continent'
,hover_data=['gdpPercap']
,labels={'pop':'人口','country':'国名','gdpPercap':'一人当たりGDP'})
fig.show()
実行結果
↑目次
色を変える
カラースケールの変更
円グラフに限らずPlotly Expressはcolor_discrete_sequenceで指定したリストカラーを順番に使用するようになっています。
例えばcolor_discrete_sequence=["red", "green", "blue"]とすれば赤、緑、青の3色をベースとしてその3色を少しずつ変化させた色がサイクリックに使用さまれます。
import plotly.express as px
df = px.data.gapminder().query("year == 2007").query("continent == 'Europe'")
df.loc[df['pop'] < 2.e6, 'country'] = 'Other countries'
fig = px.pie(df, values='pop', names='country'
,title='Population of European continent'
,color_discrete_sequence=["red", "green", "blue"])
fig.show()
実行結果
このように赤、青、緑をベースとした色がサイクリックに表示されているのがわかるとおもいます。
直接指定する方法もありますが、最初から指定されているカラースケールも豊富にあります。公式サイトのNamed Built-In Continuous Color Scalesにカラースケールが記載されています。 color_discrete_sequence=px.colors.sequential.Plasmaを指定すると以下のようになります。
↑目次
色の直接指定
カラースケールでまとまった色を指定することもできますが直接色を指定することもできます。
import plotly.express as px
df = px.data.gapminder().query("year == 2007").query("continent == 'Europe'")
df.loc[df['pop'] < 2.e6, 'country'] = 'Other countries'
fig = px.pie(df, values='pop', names='country'
,title='Population of European continent'
,color='country'
,color_discrete_map={
'Germany':'cyan'
,'Turkey':'royalblue'
,'France':'red'
,'United Kingdom':'darkblue'
}
)
fig.show()
実行結果
このときにはcolor_discrete_map(カラーマップの指定)だけではなくcolor='country'の指定も必要になります。
↑目次
線の幅と色を変える
円グラフを描画している線の太さと色を変更します。以下のようにupdate_tracesで線の色、太さを変更できます。
import plotly.express as px
df = px.data.gapminder().query("year == 2007").query("continent == 'Europe'")
df.loc[df['pop'] < 2.e6, 'country'] = 'Other countries'
fig = px.pie(df, values='pop', names='country', title='Population of European continent')
fig.update_traces(marker=dict(line=dict(color='#000088', width=2)))
fig.show()
実行結果
↑目次
まとめ
今回はPlotlyExpressを用いて描画した円グラフのスタイルを様々に変更してみました。 円グラフはPlotlyExpressでもかなりのことができます。update_tracesやupdate_layoutを用いて、 カスタマイズできる範囲が広いため公式サイトや書籍を通してどのような調整やスタイルの変更ができるか目を通しておくと良いとおもいます。
↑目次
Comment on this article
コメントはまだありません。
Send comments