ドーナツグラフを HTML で表示する 【Python】

Python

Python で、ドーナツグラフ(ドーナツチャート)を出力し、HTML で表示するサンプルコードです。JavaScript などのライブラリは使わず、ローカル PC のブラウザで動作します。
以下の環境で動作確認をしています。

環境: Windows 10、Python 3.x

背景

Python でプログラミングをしていると、結果をグラフにして HTML で表示させたくなることがあります。
HTML でのグラフの表示は、JavaScript などのツールがよく知られています。しかしながら、最近のブラウザのアップデートにより、突然、JavaScript が動かなくなることがあり、煩わしいです。
そこで、JavaScript を使わずに、グラフを HTML で表示するサンプルスクリプトをまとめておきます。
データを差し替えることで、典型的なグラフについては表示できるようになると思います。
以前、棒グラフを JavaScript を使わずに CSS で表示するサンプルについてまとめました(関連リンク参照)。そこで今回はやり方を変え、画像をいったん書き出して HTML で読み込む方法についてまとめておきます。

設定方法

① PC にフォルダを作成してください。
例: “C:/user”
② ①のフォルダに html_donut_chart1.py の名前でテキストを作成し、下記のサンプルコードを貼りつけて保存してください。

使い方: Python から画像と表示用の HTML を出力する

③ コマンドプロンプトを起動し、②のスクリプトを実行してください。
→ ①のフォルダ内に画像データと HTML ファイルが生成されます。
④ ③で生成された HTML ファイルをダブルクリックしてブラウザで表示してみてください。
うまく動いたら、②のデータを差し替えて活用してください。
また、コメントアウトしてある部分を外すと表示などを変更できます。アレンジしてみてください。

まとめ

ドーナツチャートを HTML で表示したかったのですが、ネット検索をしたところ、実務で使える程度の事例が見つかりませんでした。そこで、Python でグラフ(ドーナツチャート)を HTML で表示する方法についてまとめました。
また最近、Windows OS やブラウザの更新、仕様変更が続いています。上記の方法であれば、OS や JavaScript の仕様変更が突然あっても、また、ネットワークやサーバーが混雑していても、影響を最小化できる(サクサク動く)ことになります。
他にも、HTML での表示などについてポイントを整理しています。もしも関心があるようでしたら、参照してみてください。

関連リンク
・ HTML のグラフを出力する 【Python】
・ 画像に文字を書いて出力する 【Python】
・ 
HTML カレンダーを出力する 【Python】
・ Python で HTML ファイルを出力する
・ 【Python】 グラフを表示する方法 サンプルコード 【matplotlib】

サンプルコード

import matplotlib.pyplot as plt1 
import os 

def write1( file1, str1 ): 
    with open( file1, 'w', encoding='utf-8' ) as f1: 
        f1.write( str1 ) 
    return 0 

def generate_html1( title0 ): 
    str1 = ''' 
<html lang="ja"">
<head">
<style type="text/css"">
</style">
</head">
<body">
{{title1}} 
<img src="chart01.png" width="500" "><br">
</body"> 
</html"> 
'''.format( title1 = title0 ) 
    return str1 

def generate_plt1( title1, label1, value1 ): 
    plt1.rcParams['font.family'] = "Meiryo" 
    plt1.rcParams['font.size'] = 16 
#   plt1.title( title1 ) 
    wedge1 = {{ "alpha":0.6, "edgecolor":"white", "linewidth":2, "width":0.3 }}
    plt1.pie( value1, labels = label1, startangle = 90, radius = 1.05, counterclock = False, wedgeprops = wedge1 )
    # plt1.legend( loc="upper right" )
    # plt1.show()
    file1 = path1 + "chart01.png" 
    plt1.savefig( file1 ) 

path1 = os.path.dirname(__file__) + "/" 

title1 = "プログラミング言語ランキング 2021"
label1 = ["Python", "Java", "JavaScript", "C#", "C / C++", "PHP", "その他"]
value1 = [30, 18, 8, 7, 7, 6, 24]

generate_plt1( title1, label1, value1 ) 
str1 = generate_html1( title1 ) 

file1 = path1 + "chart01.html" 
write1( file1, str1 ) 

 

タイトルとURLをコピーしました