PythonでPowerpoint(パワーポイント)を自動化:グラフ(チャート)の作成を自動化

PowerPoint(パワポ)ドキュメント作成をPythonで自動化する方法について紹介します。

今回は、パワーポイントでグラフ(チャート)を自動化する方法を説明したいと思います。今回扱うグラフは散布図です。

PowerPointではグラフ(チャート)を頻繁に使いますね。おそらく、多くの人はExcelやその他のツールを使ってグラフを作成して、パワーポイントに貼り付けるという方法を用いるのではないでしょうか!?

しかし、毎回Excelでグラフを作成して、貼り付けるのが面倒・・・という方は、パワーポイントでグラフを作ってしまうのも良いでしょう。

パワーポイントで簡単なグラフを作るならば、Python-pptxを使えばサクッと出来てしまいます。但し、Python-pptxでは細かい設定が出来ないので、今回の記事は、簡単な図をパワーポイント上で作ることを自動化したい!という方向けの記事になっております。

スポンサーリンク

まずはスライドの作成

今回必要なモジュールのインポートと、Python-pptxでパワーポイントの新規スライド作成を行います。新規スライド作成に関する説明は、以前の記事を参照してください。

from pptx import Presentation
from pptx.chart.data import XyChartData
from pptx.enum.chart import XL_CHART_TYPE
#https://python-pptx.readthedocs.io/en/latest/api/enum/XlChartType.html?highlight=scatter#xl-chart-type

from pptx.enum.chart import XL_TICK_MARK
#https://python-pptx.readthedocs.io/en/latest/api/enum/XlTickMark.html#xltickmark

from pptx.enum.chart import XL_TICK_LABEL_POSITION
#https://python-pptx.readthedocs.io/en/latest/api/enum/XlTickLabelPosition.html#xlticklabelposition

from pptx.enum.chart import XL_LEGEND_POSITION
#https://python-pptx.readthedocs.io/en/latest/api/enum/XlLegendPosition.html#xllegendposition

from pptx.enum.chart import XL_MARKER_STYLE
#https://python-pptx.readthedocs.io/en/latest/api/enum/XlMarkerStyle.html#xlmarkerstyle

from pptx.dml.color import RGBColor
#https://python-pptx.readthedocs.io/en/latest/api/dml.html#pptx.dml.color.RGBColor

from pptx.enum.chart import XL_MARKER_STYLE
#https://python-pptx.readthedocs.io/en/latest/api/enum/XlMarkerStyle.html#xlmarkerstyle

from pptx.enum.dml import MSO_LINE
#https://python-pptx.readthedocs.io/en/latest/api/enum/MsoLineDashStyle.html#msolinedashstyle
#Presentaionオブジェクトを生成


ppt = Presentation()
#白紙のスライドを選択
slide_layout = ppt.slide_layouts[6]
#白紙のスライドを追加
slide = ppt.slides.add_slide(slide_layout_6)

#ここにコードを追加していきます

ppt.save("./test.pptx")
スポンサーリンク

Pythonでパワーポイントを自動化:グラフ(チャート)の作成

散布図を作成するには、まず、XyChartDataオブジェクトを作成します。

次に、add_seriesメソッドで系列を追加し、各系列にデータを追加します。

各系列にデータを追加したら、add_chartメソッドに、散布図を表すXL_CHART_TYPE.XY_SCATTER、チャート左上の座標, チャートの幅と高さ、XyChartDataオブジェクトを渡します。

add_chartメソッドはGraphicFrameオブジェクト(*)を返します。GraphicFrameオブジェクトのchartを実行すると、Chartオブジェクトが生成されます。

(省略)
#XyCharDataオブジェクト生成
#https://python-pptx.readthedocs.io/en/latest/api/chart-data.html#pptx.chart.data.XyChartData
chart_data = XyChartData()

#系列の作成
series_0 = chart_data.add_series('Series 0')
series_1 = chart_data.add_series('Series 1')
series_2 = chart_data.add_series('Series 2')

#各系列にデータ点を追加
for i in range(0, 10):
    series_0.add_data_point(i, i)
    series_1.add_data_point(i, 2 * i)
    series_2.add_data_point(i, 3 * i)

# スライドにチャートを追加する
x, y, cx, cy = Inches(2), Inches(2), Inches(6), Inches(4.5)
#x,y チャート左上の座標, cx,cyチャートの幅と高さ
chart = slide_6.shapes.add_chart(
    XL_CHART_TYPE.XY_SCATTER, x, y, cx, cy, chart_data
).chart
(省略)
スポンサーリンク

Pythonでパワーポイントを自動化:軸の設定を行う

では、図(チャートの体裁を少しカッコよくしていきましょう。まずは軸の設定を行います。

軸の設定では、ValueAxisオブジェクト(*)を使います。ValueAxisオブジェクトはChartオブジェクトのvalue_axisを実行すると生成されます。

軸のタイトルやグリッドライン、スケールを変更することが出来ます。

但し1点注意があります。それは、Python-pptxではy軸に関する設定しかできません。x軸は設定は出来ないので注意が必要です。

(省略)
#https://python-pptx.readthedocs.io/en/latest/api/chart.html#axis-objects
axis = chart.value_axis
axis.major_tick_mark = XL_TICK_MARK.OUTSIDE
#軸のタイトル
axis.has_title = True
axis.axis_title.text_frame.text = "Y"
#グリッドライン
axis.has_major_gridlines = True
#スケール
axis.maximum_scale = 30
axis.tick_label_position = XL_TICK_LABEL_POSITION.LOW
(省略)
スポンサーリンク

Pythonでパワーポイントを自動化:凡例の設定

凡例の設定してみましょう。凡例の表示するかの設定は、chartオブジェクトのhas_legendにTrueかFalseを設定します。

凡例の位置の設定は、chartオブジェクトのlegend.positionXL_LEGEND_POSITION.BOTTOMXL_LEGEND_POSITION.RIGHTと設定します。凡例の位置はその他、LEFTやTOPなども設定出来ます。こちらを参照してください。

#legend 
#https://python-pptx.readthedocs.io/en/latest/api/chart.html
chart.has_legend = True
#https://python-pptx.readthedocs.io/en/latest/api/chart.html#pptx.chart.chart.Legend
chart.legend.position = XL_LEGEND_POSITION.BOTTOM
スポンサーリンク

Pythonでパワーポイントを自動化:マーカーや線(ライン)設定

各系列のマーカーや線の設定では、FillFormatオブジェクト(*)とLineFormat(*)の各プロパティを介して行います。塗りつぶし関連はFillFormatを使用して、線のスタイルを変更はLineFormatを使用します。

マーカーの設定変更について簡単に説明します。chart.series[0].markerのようにすると、Markerオブジェクト(*)が返されます。Markerオブジェクトのformatを実行するとChartFormat(*)オブジェクトが返され、ChartFormatオブジェクトのfillを使うとFillFormatオブジェクトが返され、lineを使うとLineFormatプロパティをが返されます。

線のスタイル変更を行う際には、chart.series[0].formatとすると、ChartFormatオブジェクトが取得されますので、あとは、マーカー設定と同様に、ChartFormatオブジェクトのfillプロパティ、lineプロパティを使用します。

では、下記に色々な例を示すので、参考にしてください。

(省略)
#--------- Series_0の設定 ---------#
#Markerの塗りつぶしを解除=透明にする
chart.series[0].marker.format.fill.background()
#Makrerの枠線の種類を変更
#https://python-pptx.readthedocs.io/en/latest/api/enum/MsoLineDashStyle.html
chart.series[0].marker.format.line.dash_style = MSO_LINE.LONG_DASH_DOT
#Markerの枠線の太さを変更
chart.series[0].marker.format.line.width = Pt(2)
#Markerの枠線の色を変更
##https://python-pptx.readthedocs.io/en/latest/api/dml.html#pptx.dml.color.colorformat
chart.series[0].marker.format.line.color.rgb = RGBColor.from_string("Ff0000")


#--------- Series_1の設定 ---------#
#Markerのスタイルを変更
##https://python-pptx.readthedocs.io/en/latest/api/enum/XlMarkerStyle.html#xlmarkerstyle
chart.series[1].marker.style = XL_MARKER_STYLE.CIRCLE
#Markerのサイズを変更(2から72の範囲内の整数を設定。単位はポイント)
chart.series[1].marker.size = 18
#Markerの塗りつぶしの色を変更。塗りつぶしをお行うためには、fill.solid()をまず実行
chart.series[1].marker.format.fill.solid() 
chart.series[1].marker.format.fill.fore_color.rgb = RGBColor(255, 255, 0)


#--------- Series_2の設定 ---------#
#Markerを消す
chart.series[2].marker.style = None
#線を追加
chart.series[2].format.fill.solid() 
#Markerの枠線のスタイルを変更
chart.series[2].format.line.dash_style = MSO_LINE.DASH_DOT
#線の太さを変更
chart.series[2].format.line.width = Pt(2)
#線の色を変更
chart.series[2].format.line.color.rgb = RGBColor.from_string("000080")
(省略)
スポンサーリンク

完成図

上のコードを実行すると以下のような図が出来るはずです。

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