ReportLabを使用すると、Pythonを使用してPDFに折れ線グラフを挿入することができます。
本記事では、ReportLabを使用した、PDFに折れ線グラフを挿入する方法について、詳しくご説明します。
ReportLabとは
ReportLabは、Pythonを使用してPDFを操作するための外部ライブラリの1つです。
PDF操作用ライブラリは他にも、PyPDF4やPDFMinerなどいくつか存在します。
それぞれのライブラリの用途は、以下の通りです。
ライブラリ | 用途 |
---|---|
ReportLab | ・PDFの新規作成 |
PDFMiner | ・テキストの抽出 |
PyPDF4 | ・画像の抽出 ・PDFファイルの結合や分割 ・しおり(目次)の追加 |
本記事では、ReportLabによる、PDFに折れ線グラフを挿入する方法をご紹介します。
ReportLabのインストール
「ReportLab」は、以下コマンドを入力することで、インストールすることができます。
コマンドの入力は、コマンドプロンプトあるいはターミナルから行います。
pip install reportlab
動作確認として、試しに以下を入力します。
from reportlab.pdfgen import canvas
上記を入力してもエラーが発生しなければ、正常にインストールされています。
PDFに折れ線グラフを挿入する
「reportlab.pdfgen」クラスのcanvas.Canvas()で用意したPDFに対して、「reportlab.graphics.charts.linecharts」クラスのHorizontalLineChart()関数を使用することで、指定データを折れ線グラフとして描画することができます。
また「reportlab.graphics」クラスのrenderPDFを使用することで、PDFに挿入することができます。
上記関数を使用して、PDFに折れ線グラフを挿入してみます。
#input
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A5, portrait, landscape
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.cidfonts import UnicodeCIDFont
from reportlab.lib.units import mm
import os
from reportlab.lib import colors
from reportlab.graphics.shapes import Drawing
from reportlab.graphics.charts.linecharts import HorizontalLineChart
from reportlab.graphics import renderPDF
# A5(横)の新規PDFファイルを作成
p = canvas.Canvas("sample.pdf", pagesize=landscape(A5))
# 折れ線グラフデータの指定
drawing = Drawing(50, 100)
data = [(30, 40, 20, 10, 40),
(10, 20, 25, 30, 35)
]
lc = HorizontalLineChart()
lc.x = x = 15*mm
lc.y = y = 10*mm
lc.height = 110*mm
lc.width = 150*mm
lc.data = data
lc.strokeColor = colors.black
lc.valueAxis.valueMin = 0
lc.valueAxis.valueMax = 50
lc.valueAxis.valueStep = 5
lc.categoryAxis.labels.boxAnchor = 'ne'
lc.categoryAxis.labels.dx = 8
lc.categoryAxis.labels.dy = -2
lc.categoryAxis.categoryNames = ['Jan','Feb','Mar','Apr','May']
drawing.add(lc)
# 折れ線グラフの挿入
renderPDF.draw(drawing, p, x, y, showBoundary=False)
# 保存
p.showPage()
p.save()
データ2種の折れ線グラフを挿入しました。
折れ線グラフの線の色は「lines[].strokeColor」で、線の太さは「lines[].strokeWidth」([]内はインデックス番号)で、それぞれ指定することができます。
以下試してみます。
#input
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A5, portrait, landscape
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.cidfonts import UnicodeCIDFont
from reportlab.lib.units import mm
import os
from reportlab.lib import colors
from reportlab.graphics.shapes import Drawing
from reportlab.graphics.charts.linecharts import HorizontalLineChart
from reportlab.graphics import renderPDF
# A5(横)の新規PDFファイルを作成
p = canvas.Canvas("sample.pdf", pagesize=landscape(A5))
# 折れ線グラフデータの指定
drawing = Drawing(50, 100)
data = [(30, 40, 20, 10, 40),
(10, 20, 25, 30, 35)
]
lc = HorizontalLineChart()
lc.x = x = 15*mm
lc.y = y = 10*mm
lc.height = 110*mm
lc.width = 150*mm
lc.data = data
lc.strokeColor = colors.black
lc.valueAxis.valueMin = 0
lc.valueAxis.valueMax = 50
lc.valueAxis.valueStep = 5
lc.categoryAxis.labels.boxAnchor = 'ne'
lc.categoryAxis.labels.dx = 8
lc.categoryAxis.labels.dy = -2
lc.lines[0].strokeColor = colors.deeppink
lc.lines[0].strokeWidth = 1*mm
lc.lines[1].strokeColor = colors.aqua
lc.lines[1].strokeWidth = 1*mm
lc.categoryAxis.categoryNames = ['Jan','Feb','Mar','Apr','May']
drawing.add(lc)
# 折れ線グラフの挿入
renderPDF.draw(drawing, p, x, y, showBoundary=False)
# 保存
p.showPage()
p.save()
各データの色を指定した色に着色しました。
まとめ
この記事では、ReportLabを使用した、PDFに折れ線グラフを挿入する方法について、ご説明しました。
本記事を参考に、ぜひ試してみて下さい。
参考
Python学習用おすすめ教材
Pythonの基本を学びたい方向け
統計学基礎を学びたい方向け
Pythonの統計解析を学びたい方向け
おすすめプログラミングスクール
Pythonをはじめ、プログラミングを学ぶなら、TechAcademy(テックアカデミー)がおすすめです。
私も入っていますが、好きな時間に気軽にオンラインで学べますので、何より楽しいです。
現役エンジニアからマンツーマンで学べるので、一人では中々続かない人にも、向いていると思います。
無料体験ができますので、まずは試してみてください!