自動化無しに生活無し

WEBとかAIとかLinux関係をひたすら書く備忘録系ブログ

【Python】openpyxlで棒グラフ・折れ線グラフを表示させる【公式から引用】

thumbnail

コードは公式から引用し、一部編集している

ソースコード

from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference

#書き込みモードでワークブックを作る
wb      = Workbook(write_only=True)

#シートを作る
ws      = wb.create_sheet()

#データ
rows    = [ ['番号', '算数', '国語'],
            [1, 50, 70],
            [2, 60, 30],
            [3, 40, 60],
            [4, 50, 70],
            [5, 20, 40],
            [6, 60, 40],
            [7, 50, 30],
            ]

#書き込み
for row in rows:
    ws.append(row)

#棒グラフを作る
chart1              = BarChart()
chart1.type         = "col"
chart1.style        = 10

#タイトル、横軸・縦軸の指定
chart1.title        = "グラフタイトル"
chart1.y_axis.title = "点数"
chart1.x_axis.title = "番号"


#min_colとmin_rowは開始の列と行、max_colとmax_rowは終端の列と行
#つまり、B1~C8まで(列名も含める) これはエクセルでグラフを作る時と範囲は同様
data                = Reference(ws, min_col=2, min_row=1, max_col=3, max_row=8)

#A2からA8までをX軸とする
cats                = Reference(ws, min_col=1, min_row=2, max_row=8)

#chart1にデータを追加(タイトルも表示)
chart1.add_data(data, titles_from_data=True)

#X軸のラベルをセット
chart1.set_categories(cats)
chart1.shape        = 4

#シートのA10にグラフを追加する。
ws.add_chart(chart1, "A10")



from openpyxl.chart import LineChart

chart2              = LineChart()
chart2.title        = "グラフタイトル"
chart2.y_axis.title = '点数'
chart2.x_axis.title = '番号'

chart2.style        = "12"
chart2.grouping     = "standard" 

data                = Reference(ws, min_col=2, min_row=1, max_col=3, max_row=8)
chart2.add_data(data, titles_from_data=True)

ws.add_chart(chart2, "G10")


#保存
wb.save("graph.xlsx")

openpyxl.chart.BarChartを使用する。このオブジェクトにReferenceで作ったデータオブジェクトを追加する。

データオブジェクトの範囲指定は通常のエクセルと同様。

LibreOfficeの場合は、表記が一部省略・変更されてしまう点に注意。

結論

もし、MS Excelを使用しているのではなく、LibreOfficeを使用する場合、グラフの表記が変わってしまう。

その場合はMatplotlibを使用して画像化させて貼り付けるか、HTML上に表示させる場合はChart.jsを使うと良いだろう。

データの取得にはスクレイピングを使うと良いだろう。

スポンサーリンク

シェアボタン

Twitter LINEで送る Facebook はてなブログ