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 )