ホーム > 記事 > Python > Plotly > 【Plotly】円グラフの設定 | PlotlyExpress | データの可視化

記事

【Plotly】円グラフの設定 | PlotlyExpress | データの可視化

前回、【Plotly】円グラフを描くではPlotlyExpressを用いて円グラスを描きました。 実際には描画してそのままということは少なく表示を変更したり様々な修正をおこなうことが多いとおもいます。 今回もPlotlyの公式サイトPie Charts in Pythonをベースに解説します。 しかし公式サイトでは最初に描画したデータではなく、ことなるデータを元に描画しているため、 調整前と後の差分が若干わかりにくくなっていると感じます。

そのためあえて前回描画したデータをそのまま使い調整前と後がわかりやすいようにしながら、解説してゆきたいとおもいます。

公式サイトPie Charts in Pythonのほうが設定例や記述例が多いため、英語が大丈夫な人や、ソースコードだけで理解できる人は公式サイトを直接読んだほうが良いかもしれません。

目次

  1. 前回までの復習
  2. グラフ中に情報を表示する
  3. フォントサイズを指定する
  4. グラフ中に表示する情報の変更
  5. ホバー時のラベルに情報を追加する
  6. 色を変える
    1. カラースケールの変更
    2. 色の直接指定
  7. 線の幅と色を変える
  8. まとめ

前回までの復習

公式サイトのサンプルソース。以下の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行目でグラフを描画しています。その結果、以下の円グラフが描画されます。

pie-chart-config-1

↑目次

グラフ中に情報を表示する

グラフ中にはパーセンテージが表示されていますが、グラフの面積が小さい場合には線が引かれグラフ外に割合が表示されます。

このパーセンテージをすべてグラフの中に表示するようにします。

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'を指定することですべての国の情報がグラフ中に表示されるようになります。

pie-chart-config-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()

pie-chart-config-font-size

↑目次

グラフ中に表示する情報の変更

円グラフはデフォルトではテキストにパーセンテージのみを表示します。そこでラベル(ここでは国名)も一緒に表示してみます。

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')の部分でパーセントだけでなくラベル(ここでは国名)を表示するようにします。

pie-chart-config-change-label

このようにラベル(国名)も一緒に表示されます。 ただし小さいグラフにむりやりラベルも表示させると文字が小さくなり見にくくなるため、 表示する情報は必要最小限が良いでしょう。 割合はだいたいで良いのであれば、パーセント表示はせずに国名(ラベル)のみの表示を考えても良いとおもいます。 その場合にはtextinfo='label'とします。

fig.update_traces(textinfo='label')

↑目次

ホバー時のラベルに情報を追加する

円グラフはホバー時(マウスをグラフの上に持ってきたとき)に表示される吹き出しの内容を変えることができます。 デフォルトでは以下のように円グラフ表示時にvaluesとnamesで指定した値を表示します。

pie-chart-config-change-hover-label-1

ここで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()

実行結果

pie-chart-config-change-hover-label-2

↑目次

色を変える

カラースケールの変更

円グラフに限らず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()

実行結果

pie-chart-config-change-color-scale-1

このように赤、青、緑をベースとした色がサイクリックに表示されているのがわかるとおもいます。

直接指定する方法もありますが、最初から指定されているカラースケールも豊富にあります。公式サイトのNamed Built-In Continuous Color Scalesにカラースケールが記載されています。 color_discrete_sequence=px.colors.sequential.Plasmaを指定すると以下のようになります。

pie-chart-config-change-color-scale-2

↑目次

色の直接指定

カラースケールでまとまった色を指定することもできますが直接色を指定することもできます。

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()

実行結果

pie-chart-config-direct-color-setting

このときには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()

実行結果

pie-chart-config-change-line-style

↑目次

まとめ

今回はPlotlyExpressを用いて描画した円グラフのスタイルを様々に変更してみました。 円グラフはPlotlyExpressでもかなりのことができます。update_tracesやupdate_layoutを用いて、 カスタマイズできる範囲が広いため公式サイトや書籍を通してどのような調整やスタイルの変更ができるか目を通しておくと良いとおもいます。

↑目次

この記事へのコメント

コメントはまだありません。

コメントを送る

必須
必須  
※ メールアドレスは公開されません
任意
必須
Loading...  画像の文字を入力してください