本記事ではPythonのグラフライブラリとして使えるplotlyによる「円グラフ」の作成について紹介します。
plotlyチュートリアルの円グラフ、サンバーストから例題を抜粋しながら解説していきます。
プログラミングをこれから初める方向けに簡単なグラフを4種選びました。
①単純な円グラフ
②好みの色にした円グラフ(選択&自作)
③データラベルと%値を表示する円グラフ
④別系列のカラースケールも追加した円グラフ(中級者向け)
【おまけ】データ表示レイアウトの変更
今回紹介する例題はグラフの元データを容易する必要がなく、下記プログラムを完コピすればグラフを作成することができます。
まずは実際に手を動かしてコードを書いて見てください。
Anacondaのインストールがまだの方はこちらの記事を参考に準備してください。
Jupyter notebookの起動と使い方まで紹介しています。
導入から基本的な使い方まで紹介しています。
今回も前回同様plotly_expressを使用するので、まずはインポートします。
import plotly.express as px
import plotly.io as pio
pxのhelp機能でpieチャートで使える引数を確認します。
help(px.pie)
今回はnames、values、color、color_discrete_sequence,color_discrete_map、hover_name、hover_data、title、color_continuous_midpoint等を使った例を紹介していきます。
元データはplotly_expressで用意されているdata.tipsを使用します。
1行目がデータを準備するコードです。
dfという変数にtipsのデータを読み出して使う準備をします。
tipsの中には合計消費量(totall_bill)(チップを除く)、チップ量(tip)、顧客の性別(sex)、消費した曜日(day)、消費期間(time)、食事回数(size)を含む7つのフィールドが含まれています。
2行目がグラフを作成するコードです。
fig=px.pie()がplotly_express(px)で円グラフ(pie)を使いますよという意味です。
figはただの変数なので何でも大丈夫です。figure=図を意味しているので良く使われる表現です。
values=の後に対象のデータを定義します。
今回は「tip=チップ量」を選択します。
names=’day’で曜日ごとに集計されたtip量のデータで円グラフが作成されます。
※values=’tip’, names=’day’の後に,title=”〇〇”とすると図に題目が作成されます。
文字を入力するときはダブルクォーテーション””やシングルクォーテーション’’で囲みます。
3行目はJupyter上にグラフを表示するコードです。
先ほど作った変数figに図のデータが入っているので表示する命令であるshow()で表示されます。
4行目は保存するコードです。(保存場所はJupyterの階層と同じ場所になります)
これはなくても大丈夫です。
htmlで保存すると、開いてグラフを動かすことが可能です。
また、マウスをグラフに当てた時に右上に表示されるカメラマークを押すとpngで保存できます。
また、パイにカーソルを合わせるとtipのデータとdayのデータが表示されます。
import plotly.express as px
df = px.data.tips()
fig = px.pie(df, values='tip', names='day')
fig.show()
pio.write_html(fig,file="./4-1.html")
ここでは①に加えてcolor_discrete_sequenceを使い色を設定するやり方を紹介します。
color_discrete_sequence=px.colors.sequential.RdBu
今回はRdBuという色のセットを使った例です。
px.colors.sequential.まで入力してtabキーを押すと候補を出してくれます。
df = px.data.tips()
fig = px.pie(df, values='tip', names='day', color_discrete_sequence=px.colors.sequential.RdBu)
fig.show()
pio.write_html(fig,file="./4-2.html")
ここでは①に加えてcolor_discrete_mapを使い色を設定するやり方を紹介します。
color_discrete_map={‘Thur’:’rgb(77,77,0)’,・・・・
このように各dayに対してRGB値を指定するだけです。
※RGB値での例を紹介しますが、RGB値を使わない色のセットを使った例はHPの
Discrete Colors in Pythonを参照してください。
px.colors.sequential.まで入力してtabキーを押すと候補を出してくれます。
df = px.data.tips()
fig = px.pie(df, values='tip', names='day', color='day',
color_discrete_map={'Thur':'rgb(77,77,0)',
'Fri':'rgb(77,77,77)',
'Sat':'rgb(0,113,188)',
'Sun':'rgb(193,145,0)'})
fig.show()
pio.write_html(fig,file="./4-3.html")
ここではtitle、hover_data、labelsの使い方を紹介します。
titleはその名の通り、グラフ上に表示されるタイトルです。
hover_data=はマウスのポインタをパイに合わせると表示されるデータを追加できる機能。valuesとnamesの値は標準で表示されるようです。
labelsはhover_dataで表示されるラベル名を指定することができます。
最後にfig.update_traces()で円グラフのパイ内にテキストを追加し、の位置、値の表示指定など細かなレイアウトを変更できます。
df = px.data.gapminder().query("year == 2007").query("continent == 'Americas'")
fig = px.pie(df, values='pop', names='country',
title='Population of American continent',
hover_data=['lifeExp'], labels={'lifeExp':'life expectancy'})
fig.update_traces(textposition='inside', textinfo='percent+label')
fig.show()
pio.write_html(fig,file="./4-4.html")
color_continuous_midpointを使うことで値の大きさによって色を変えるカラースケールを追加することができます。
複数の情報を1つの円グラフに集約したい時、視覚的に強調したい時に使いこなせるとかっこいいグラフです。
import numpy as np
df = px.data.gapminder().query("year == 2007")
fig = px.sunburst(df, path=['continent', 'country'], values='pop',
color='lifeExp', hover_data=['iso_alpha'],
color_continuous_scale='RdBu',
color_continuous_midpoint=np.average(df['lifeExp'], weights=df['pop']))
fig.show()
pio.write_html(fig,file="./4-5.html")
最後はplotly_express(px)を使わない場合の例です。
go.Figure(go.Pie())で円グラフが書けます。
texttempateやtextpositionなどが使えます。
go.pieまで入力した後にshift+tabで使える機能が分かります。
texttemplateの”%{label}: %{value:$,s} <br>(%{percent})”と書かれた部分は、%{}で{}内に変数が使えます。
:$,sで書式が値段になり、1000ずつに「,」がつきます。
<br>はHTMLでも使われるbrタグで、改行を意味しています。
最後にtextposition=”inside” でパイの内側にテキストを表示することを指定しています。
import plotly.graph_objects as go
fig = go.Figure(go.Pie(
values = [40000000, 20000000, 30000000, 10000000],
labels = ["Wages", "Operating expenses", "Cost of sales", "Insurance"],
texttemplate = "%{label}: %{value:$,s} <br>(%{percent})",
textposition = "inside"))
fig.show()
pio.write_html(fig,file="./4-6.html")
↓Plotlyについて学べる数少ない参考書です。