Python

【plotlyチュートリアル】<<第4回>>円グラフ

pie、sunburstグラフ

4種の円グラフの作成

本記事ではPythonのグラフライブラリとして使えるplotlyによる「円グラフ」の作成について紹介します。

plotlyチュートリアルの円グラフサンバーストから例題を抜粋しながら解説していきます。

プログラミングをこれから初める方向けに簡単なグラフを4種選びました。

①単純な円グラフ

②好みの色にした円グラフ(選択&自作)

③データラベルと%値を表示する円グラフ

④別系列のカラースケールも追加した円グラフ(中級者向け)

【おまけ】データ表示レイアウトの変更

今回紹介する例題はグラフの元データを容易する必要がなく、下記プログラムを完コピすればグラフを作成することができます。

まずは実際に手を動かしてコードを書いて見てください。

AnacondaのインストールとJupyter notebookの準備

Anacondaのインストールがまだの方はこちらの記事を参考に準備してください。

Jupyter notebookの起動と使い方まで紹介しています。

【2020年版、Python3をはじめよう!(Mac&Win対応)】AnacondaとJupyter notebookの始め方 はじめに Jupyter notebookとは Jupyter notebook(ジュピター・ノートブック)はブラウザ上で...

plotlyとplotly_expressのインストール

導入から基本的な使い方まで紹介しています。

Pythonをグラフ作成で学ぶ【plotly_expressで1行プログラミング】 【本記事の目標】 たった1行で動くグラフを作成し、体感する! これからPythonを学びたい人向けに朗報です。 今から紹介...

①単純な円グラフ

plotly_expressの準備とhelp機能

今回も前回同様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")

RGB値で色を指定する方法

ここでは①に加えて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")

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