【PythonでPowerPointを操る】python-pptxでグラフを作成する方法

スポンサーリンク
Python外部ライブラリ(python-pptx)グラフ挿入 Python

今回も引き続き、Pythonから「PowerPoint」を操作する機能を供する「python-pptx」ライブラリを紹介していきます。

連載の目次は、以下のようになっていますので参考になさってください。

< 連載目次 >
  • 【連載1回目】ライブラリの導入とファイルとスライドの作成方法について ->>
  • 【連載2回目】段落にドキュメントを挿入しやフォントなどを設定する方法 ->>
  • 【連載3回目】スライドにグラフ(散布図や折れ線グラフ)を挿入する ->>
  • 【連載4回目】スライドにテーブル (表)を挿入する ->>
  • 【連載5回目】スライドに図形(オートシェイプ・画像・ボックス)を挿入する ->>

さて、ビジネスシーンにおいて数値の分布や時間推移を可視化するといったニーズは以外にも多いのではないでしょうか。

例えば、売上の月間の推移や商品の年代別の販売個数など、「マーケッティング」や「統計データ分析」を行いたいときなどです。

データの可視化には、「」「テーブル(表)」「グラフ」などいろいろな手段はあるわけですが、これらの中でももっとも効果を発揮する要素としては、「スライドにグラフを挿入する」だと筆者は考えます。

ところで、グラフを作るとき皆さんはどのようなツールを使うでしょうか?

おそらく、PowerPoint用の資料を作るにしても一度Excelでつくったグラフを作ってから、それをスライドに貼り付けて資料を作っていく手順がほとんどだと思います。

それでも、全く間違いではないのですが、、

Excel→PowerPointという2つのツールを行き来することなくPowerPointだけで自動的にグラフが書けるとしたらより便利だと感じませんか?

そこで、連載3回目となる今回はpython-pptxだけを使ってPowerPointのグラフを作成・挿入する方法を紹介します。

この記事を読むことで次のことが分かるようなります。

この記事で学べること
  • PowerPointにグラフを挿入する手順を図解で解説する。
  • グラフ(Chartオブジェクト)の関連オブジェクト・属性について整理する。
  • 棒グラフ、散布図といった主要グラフのコード例を詳細解説とともに紹介する。

それでは、次節より具体的なグラフ作成の手順について解説をしていきます。

なお、本記事内で紹介する各種クラスや関数などの使い方は一例です。省略可能なオプション引数などについては割愛していますので、詳細や不明点などは必要に応じて下記「公式ドキュメント」を参照してください。

python-pptx 公式ドキュメント(API Document)

https://openpyxl.readthedocs.io/en/stable/
スポンサーリンク

1. グラフ(Chartオブジェクト)を作成する

本節では、python-pptxを使ってスライドにグラフを作成する手順を解説していきます。

python-pptxで対応できるグラフの種類は、立体(3D)を除いたほぼ全てのタイプです。それぞれタイプによって、「データ(ChartDataオブジェクト)」(後述)作成手順に違いはありますが、手順の概要はどれも同じです。

まず、はじめにグラフ作成のフローを解説します。(図1)

以降の説明の➀~➄は<図1>内の番号とはリンクしています。

グラフの作成フロー
図1 python-pptxのグラフ作成フロー

➃の「add_chart()メソッド」でShape(グラフ)オブジェクトを生成する際に、どのタイプのグラフを作成するかあらかじめ宣言する必要があります。

このグラフタイプの定義(Enum)は、XL_CHART_TYPEクラスにまとめられているのでインポートします。

python-pptx 公式ドキュメント(XL_CHART_TYPEクラス)

XL_CHART_TYPE — python-pptx 0.6.18 documentation (python-pptx.readthedocs.io)

XL_CHART_TYPEクラスの主要な定義は以下ようなものがあります。

XL_CHART_TYPE_各種グラフまとめ
図2 XL_CHART_TYPEクラスの主要な定義(Enum)

Exceのグラフ各種に対応しているようですが、立体(3D)グラフのサポートは対象外のようです。

XL_CHART_TYPE_各種グラフ
図3 XL_CHART_TYPEクラス(Excelに対応)

【➁】 グラフを配置する場所(スライドの左上が原点)と、グラフエリアのサイズ(縦・横)を決めます。スライドの座標を決める単位は、「インチ(Inches)」「センチ(Cm)」「ポイント(Pt)」などがあります。必要な単位系のクラスをインポートします。

特に単位を指定しなければ、Emu単位が適用されますが、我々日本人とっては扱いづらいので、上記の単位系を使うことがおすすめします。

【➂】 グラフの参照データChartDataオブジェクトを用意します。データクラスは作成するグラフのタイプにより個別に提供されています。詳しくは、後述しますが、棒グラフや折れ線グラフの場合は、ChartDataクラス、散布図はXyChartDataクラスを事前にインポートします。

【➃】 Shape(GraphicFrame)オブジェクトをadd_chart()メソッドで取得と同時に、Shapesコレクションに追加されます。add_chart()メソッドの引数には、➀➁➂で用意したオブジェクトを設定します。

【➄】 ➃で取得したShape(GraphicFrame)オブジェクト(グラフ・テーブル・SmartArtのコンテナ)からは、直接グラフを操作することはできません。chartプロパティによってChartオブジェクトを取得した後、配下の属性を使ってグラフ本体の詳細設定をしていきます。


補足事項

また➂のデータセットの作り方について補足します。

データセットについては、Excelでのグラフ作成の知識を必要とします。

最低限、「系列とは?」「カテゴリ(系列)とは?」といったことは分かっているものとして以降の解説をします。本記事では、例えば図4の棒グラフがあった場合、データ区分の呼称は以下のように統一します。図4 系列とカテゴリ(項目)の違い

python-pptx_Excelのカテゴリと系列_rev0.2
図4 系列とカテゴリ(項目)の違い

カテゴリ(項目)とは、X軸(項目軸)の区分領域数を指します。

また、系列(シリーズ)とは、項目を共有して、複数のデータを持たせることができますが、個々のデータの組合せ(レコード)のことを指します。

図4の例でいえば、3つのカテゴリ(項目・赤枠)があって、各カテゴリ内に3つずつ系列(青枠)を含むイメージになります。

さらに、図4(棒グラフ)は各系列で、カテゴリ(項目)を共通としましたが、散布図やバブルチャートといったグラフタイプは、カテゴリ(値)を系列毎に個別指定することができます。

以上が、グラフ作成における前提知識になります。

それでは、フロー内で登場した各オブジェクトやメソッド・属性について次項より詳しく解説していきます。

1.1 グラフの参照データ(ChartDataオブジェクト)を定義する

グラフを作成するには、その参照先となるデータをあらかじめ定義する必要があります。具体的には、先の作成フローの工程➃にあるadd_chart()メソッド引数dataに渡すChartDataオブジェクトを用意します。

ChartDataオブジェクトの生成手順(使用するクラス)は、目的のグラフの種類によって異なるため使い分ける必要があります。まとめると以下のようになります。

python-pptx_ChartDataオブジェクトの使い分け
図5 グラフタイプによるChartDataクラスの使い分け

大きくカテゴリ(項目)の共有の有無で区分されますが、それぞれの詳細を次項にて解説していきます。

1.1.1 折れ線・棒・円グラフの参照データの定義<CategoryChartDataクラス>

折れ線・棒グラフなど、複数の系列で共通のカテゴリを共有するタイプのグラフは、CategoryChartDataクラスもしくはChartDataクラスのオブジェクトを参照データにとります。

書式は以下のとおりです。

CategoryChartData / ChartDataオブジェクトの取得

from pptx.chart.data import CategoryChartData

CategoryChartData()

戻り値: CategoryChartDataオブジェクト


from pptx.chart.data import ChartData

ChartData()

戻り値: ChartDataオブジェクト

上記2つのクラスは機能的には全く同じです。以下、公式ドキュメントにあるように完全なエイリアスであるとあります。今後の新規開発時には、「CategoryChartDataクラス」の使用を推奨するとコメントがあります。

ChartData is simply an alias for CategoryChartData and may be removed in a future release. All new development should use CategoryChartData for creating or replacing the data in chart types other than XY and Bubble.

<公式ドキュメントの引用> ChartDataクラスについてのコメント

オブジェクトの取得ができたところで、今度は配下のプロパティを通して「カテゴリ(項目名)」や「系列データ」を設定していきます。

CategoryChartData / ChartDataオブジェクトの関連メソッド・属性

カテゴリの設定・取得

CategoryChartData.categoriesプロパティ

機能:カテゴリ名をリスト形式で設定する/Categoriesコレクションを取得 例) [‘項目名1’, ‘項目名2’, …]


カテゴリの追加

CategoryChartData.add_categry(label)メソッド

機能:新しいカテゴリーを追加する(Categoriesコレクションの最後尾に)

引数: label:追加するカテゴリ名

戻り値: Categoryオブジェクト


系列の追加とデータの設定

CategoryChartData.add_series(name, values=(), number_format)メソッド

機能:系列の追加とデータを設定する

引数: name:追加する系列名を指定する

引数: values :タプル形式(カテゴリ1,カテゴリ2,・・・ )で系列の各カテゴリー毎のデータを設定する

引数: number_format: 系列データの書式を設定する 例)  ‘#,##0’

つまり、カテゴリ(項目名)の設定はcategoriesプロパティ(add_category()メソッド)を、系列データの設定はadd_series()メソッドを「CategoryChartDataクラス」に対して行います。

CategoryChartDataオブジェクトの階層構造
図6 CategoryChartDataオブジェクトとその配下のメソッド・属性

書式の解説だけでは分かりずらいと思いますので、参照データを作るサンプルコードを一つ紹介します。<List1>

from pptx.chart.data import CategoryChartData	    # カテゴリグラフ用のデータ型を提供するクラス

# CategoryChartDataオブジェクトを作成し、カテゴリ、系列名、各データを設定

c_data = CategoryChartData()                 	# CategoryChartDataオブジェクトを作成
c_data.categories = ['2019', '2020', '2021']   	# カテゴリ名の設定
c_data.add_series('X', (1250, 2005, 1660))    	# 各カテゴリのデータを指定(系列1)
c_data.add_series('Y', (620, 850, 750))     	# 系列2
c_data.add_series('Z', (175, 310, 220))     	# 系列3

<List1>により、3つのカテゴリ(2019, 2020, 2021)と、3つの系列(X, Y, Z)をもつデータセット(ChartDataオブジェクト)の生成ができました。

1.1.2 散布図の参照データの定義<XyChartDataクラス>

散布図など、系列ごとに個別の項目(Xの値)を指定することができるタイプのグラフは、XyChartDataクラスのオブジェクトを参照データにとります。書式は以下のとおりです

XyChartDataオブジェクトの取得

from pptx.chart.data import XyChartData

XyChartData()

戻り値: XyChartDataオブジェクト

オブジェクトの取得ができたところで、今度は配下のメソッドを通して「系列の追加」と「系列のデータ(X,Yのデータ組合せ)の設定」をしていきます。

見出し

系列の追加

XyChartDataオブジェクト.add_series(name, number_format)メソッド

引数: name :系列名を設定する

引数: number_format :系列データの書式を指定する(オプション=None)

戻り値: XyseriesDataオブジェクト


系列のデータの設定

XySeriesDataオブジェクト.add_data_point(x, y, number_format)メソッド

引数: x:x軸のデータをリスト形式で指定する

引数: y:y軸のデータをリスト形式で指定する

引数: number_format:データの書式を指定する(オプション=None)

戻り値: XyDataPointオブジェクト

系列自体は、add_series()メソッドで得られるXySeriesDataオブジェクトによって管理されます。さらに、個々の系列データ(X,Yのデータ組合せ)は、add_data_point()メソッドにより設定します。

先の<1.1.1>ChartDataよりも、XySeriesDataを経由する分オブジェクトの階層が深く複雑になります。階層構造を以下に示します。(図7)

XyChartDataオブジェクトの階層構造
図7 XyChartDataオブジェクトとその配下のメソッド・属性

さて、書式の解説だけではやはり理解し辛いと思いますので、散布図の参照データを作るサンプルコードを紹介します。<List2>

from pptx.chart.data import XyChartData         		# XYグラフ用のデータ型を提供するクラス

# XyChartDataオブジェクトを作成し、系列とX,Yセットデータを設定する

vals1 = []
vals2 = []

for n in range(20):                        # データセットを作る
    vals1.append((n+0.5, 0.8*(n+0.5)+1))
    vals2.append((n, 0.25*n*n-0.47*n+2.75))

c_data =XyChartData() 			               # CategoryChartDataオブジェクトを作成

s1 = c_data.add_series('系列1')    		   # 系列名()の設定
s2 = c_data.add_series('系列2') 

for val in vals1:
    s1.add_data_point(val[0], val[1])  		 # 系列1にデータセットを設定

for val in vals2:
    s2.add_data_point(val[0], val[1])   		# 系列2にデータセットを設定

<List2>では、14,15行目で系列を2つ(“系列1”,”系列2”)用意します。

その系列の中身のデータは、18,21行目で設定します。データはあらかじめ、9行目、20行目で20個分のタプル(X, Y)を要素とするリストを用意しています。

1.2 グラフの本体(フレーム)を定義する(GraphicFrameオブジェクト)

<1.1>項で参照データの定義ができました、本稿ではグラフ本体をスライドに配置するためのフレーム(GraphicFrameオブジェクト)について解説します。

GraphicFrameオブジェクトはShapeオブジェクトの一種です。ですので、スライドを構成する全ての要素をまとめたShapesコレクションに追加する必要があります。そのために、次のadd_chart()メソッドが用意されています。

python-pptx_GraphicFrameオブジェクトとShapesコレクションの関係
図8 ShapesコレクションとGraphicFrameオブジェクト(グラフ)の関係
GraphicFrameオブジェクト(グラフ本体)の追加

Shapesコレクション.add_chart(chart_type, x, y, cx, cy, chart_data)メソッド


引数: chart_type :グラフの種類(XL_CHART_TYPEクラスのEnum)を指定する 詳細は後述

引数: x :グラフの左上のx座標を指定

引数: y :グラフの左上のy座標

引数: cx :グラフの幅

引数: cy :グラフの高さ

引数: chart_data: グラフの参照データ(ChartDataオブジェクト)を設定する

戻り値:Shape(GraphicFrame)オブジェクト / Shapesコレクションに追加する

引数chart_typeにて追加するグラフの種類をXL_CHART_TYPEクラスの定義(Enumeration)の中から選択・指定します。(図9)

XL_CHART_TYPE_各種グラフまとめ
図9 XL_CHART_TYPEクラス(主要な定義の抜粋/再掲)

また、引数chart_dataには、<1.1>項で解説した参照データ定義(ChartDataオブジェクト)を設定します。

1.3 グラフの見栄え(タイトル・軸・凡例)を整える(Chartオブジェクト)

スライドにGraphicFrame(Shape)オブジェクトを追加できたので、デフォルト設定のグラフが反映されました。

ただこの時点でのデザインは、最低限のシンプルなものなので、見栄えをカスタマイズしたくなります。

GraphicFrame(Shape)オブジェクトから、chartプロパティにて取得できるChartオブジェクトには、Excelと同レベルの設定を施すための属性がおおく提供されています。本項では、使用頻度の高いグラフ設定を厳選して紹介します。

Chartオブジェクトの取得

GraphicFrameオブジェクト.chartプロパティ

戻り値:Chartオブジェクト

Chartオブジェクト配下の主な関数、プロパティには以下にようなものがあります。

タイトル

グラフの「メインタイトル」を設定します。X軸、Y軸のタイトルについては後述します。

Chartオブジェクト機能その他詳細
has_titleプロパティメインタイトルの設定の有無True(タイトル有り)/False(タイトル無し)
chart_title.text_frameプロパティタイトルにテキストを設定するTextFrameオブジェクト】で設定
(一般のテキスト設定と同じ)
表1 タイトルの関連属性(主要なもの抜粋)

凡例

系列データの区別を表記する「凡例」は、グラフの必須要素となります。「凡例」に関わる属性は主として以下があります。

Chartオブジェクト機能その他詳細
has_legendプロパティ凡例の表示の有/無の設定True(表示)/False(非表示)
legend.positionプロパティ凡例の配置場所を指定するXL_LEGEND_POSITIONクラス】の定義(Enum)から選択
下側(BOTTOM),右側(RIGHT),上側(UP)…
legend.include_in_layoutプロパティ凡例のプロットエリア内配置の可否設定True(配置可)/False(不可)
表2 凡例の関連属性(主要なもの抜粋)

グラフの「タイトル」と「凡例」に関連するプロパティの対応例をまとめました。(図10)

python-pptx_Chartオブジェクトの属性_Title_Legend
図10 タイトルと凡例の対応プロパティ

X軸/Y軸

軸の設定は、X軸、Y軸で個別に設定できます。X軸はcategory_axisプロパティでY軸はvalue_axisプロパティでAxisオブジェクトを取得して配下の属性で設定します。

設定可能な属性は殆ど共通でが、一部にY軸に特化した属性もあるので公式ドキュメントを参照してください。下記に主要な属性をまとめました。

Chartオブジェクト機能その他詳細
category_axisプロパティX軸の書式を設定するAxisオブジェクトで設定する
value_axisプロパティY軸の書式を設定するAxisオブジェクトで設定する
表3 Axisオブジェクトを取得する属性
Axisオブジェクト機能その他詳細
has_titleプロパティ軸タイトルの有効/無効の設定・読取りTrue(有効)/False(無効)
axis_titleプロパティ軸のタイトルを設定するTextFrameオブジェクト】で設定する
has_major_gridlinesプロパティ主軸線の有効/無効の設定・読取りTrue(有効)/False(無効)
minor_gridlinesプロパティ補助線の有効/無効の設定・読取りTrue(有効)/False(無効)
maximum_scaleプロパティ軸の最大値を指定する浮動小数で指定、Noneの場合は自動設定
minimum_scaleプロパティ軸の最小値を指定する浮動小数で指定、Noneの場合は自動設定
表4 軸設定の関連属性(主要なもの抜粋)

グラフの「軸(X,Y)の設定」に関連するプロパティの対応例をまとめました。(図11)

python-pptx_Axisオブジェクトの属性イメージ図
図11軸設定の対応プロパティ

以上が、スライドへグラフを挿入する主要なオブジェクトの解説となります。

次節では、実際にグラフを挿入するコード例を2つ紹介します。

2. グラフを挿入するプログラム例<実践編>

Python_基本文法_内包表記

これまでに説明してきた各種オブジェクトとメソッド・プロパティですが、実際の実用事例を紹介します。一般的によく活用される「棒グラフ」「散布図」を例にSampleプログラムを示します。

2.1 棒グラフを作成するコード例

SAMPLE➀

コードの概要は、カテゴリ付き参照データセット(CategoryChartDataオブジェクト)を用意した後、add_chart()メソッドでスライドにグラフを挿入します。また、凡例を追加しグラフの見栄えを整えます。

from pptx import Presentation
from pptx.chart.data import CategoryChartData	#  カテゴリグラフ用のデータ型を提供するクラス
from pptx.enum.chart import XL_CHART_TYPE	# グラフの種類を定義するクラス
from pptx.enum.chart import XL_LEGEND_POSITION  # 凡例の位置を定義するクラス
from pptx.util import Cm            	# cm(センチメートル)単位を定義するクラス

#--------------------------------------------------------------------------
# CategoryChartDataオブジェクトを作成し、カテゴリ、系列名、各データを設定

c_data = CategoryChartData()                 	# CategoryChartDataオブジェクトを作成
c_data.categories = ['2019', '2020', '2021']   	# カテゴリ名の設定
c_data.add_series('X', (1250, 2005, 1660))    	# 各カテゴリのデータを指定(系列1)
c_data.add_series('Y', (620, 850, 750))     	# 系列2
c_data.add_series('Z', (175, 310, 220))     	# 系列3

#--------------------------------------------------------------------------
prs = Presentation()
sld0 = prs.slides.add_slide(prs.slide_layouts[5])
sld0.shapes[0].text = "棒グラフ(COLUMN_CLUSTERED)"

# グラフ(棒グラフ)の追加
sld0.shapes.add_chart(XL_CHART_TYPE.COLUMN_CLUSTERED	# shapesコレクションにchartオブジェクト(棒グラフ)を追加
                           , Cm(5), Cm(6)            	# 引数にグラフ種類、位置、先に作ったデータを渡す
                           , Cm(15), Cm(10), c_data)
ch = sld0.shapes[1].chart                            	# chartオブジェクトの取得

#--------------------------------------------------------------------------
# 凡例の設定

ch.has_legend = True                                	# 凡例を有効にする
ch.legend.position = XL_LEGEND_POSITION.RIGHT        	# 凡例の配置場所を指定(上下左右)
ch.legend.include_in_layout = False                 	# 凡例の配置場所(グラフの中外)

prs.save('Blog_棒グラフの作成.pptx')

それでは、コードのポイントを解説します。

10~14行目:【参照データセットの準備】

棒グラフの参照データ領域を定義するために、CategoryChartDataクラスからオブジェクトを生成し変数c_dataとして参照します。

カテゴリ(項目名)をcategoriesプロパティで、系列(名・データ)をadd_series()メソッドでそれぞれ、リスト形式でデータを設定します。

これで、3つのカテゴリ(2019, 2020, 2021)と、3つの系列(X, Y, Z)をもつデータセット(ChartDataオブジェクト)の生成ができました。

22~24行目:【グラフ本体(GraphicFrameオブジェクト)の挿入】

スライドの要素に、add_chart()メソッドでグラフ本体(GraphicFrameオブジェクト)を追加します。

第1引数に、棒グラフのクラス定数(COLUMN_CLUSTERED)と、第6引数に先の参照データセットを渡たします。第2,3引数は挿入位置(グラフの左上の座標)、第4,5引数にグラフのサイズ(幅、高さ)を指定します。

25,30~32行目:【Chartオブジェクトの取得と凡例の追加】

chartプロパティで、GraphicFrameオブジェクトから、Chartオブジェクトを取り出します。

グラフの装飾はChartオブジェクトの属性を経由して行います。今回は「凡例」(Legendオブジェクト)の表示を有効にしています。


<List3>の実行結果は以下のようになりました。

棒グラフの挿入され、凡例が表示されました。

棒グラフの作成と凡例の追加
図12 List3の実行結果(棒グラフ)

2.2 散布図を描画するSample

プログラム概要は、カテゴリ付きデータセット(XyChartDataオブジェクト)に系列名と対応するX,Yのデータセットを設定します。次にadd_chart関数XL_CHART_TYPE.XY_SCATTERを指定して散布図を作成します。またグラフを見やすくするためマーカーを指定し、Y軸にタイトルを付けています。

from pptx import Presentation
from pptx.chart.data import XyChartData         	# XYグラフ用のデータ型を提供するクラス
from pptx.enum.chart import XL_CHART_TYPE       	# グラフの種類を定義するクラス
from pptx.enum.chart import XL_MARKER_STYLE     	# グラフのマーカーの種類を定義するクラス
from pptx.util import Cm

#--------------------------------------------------------------------------
# XyChartDataオブジェクトを作成し、系列とX,Yセットデータを設定する

vals1 = []
vals2 = []

for n in range(20):                 # データセットを作る
    vals1.append((n+0.7, 0.6*(n+0.7)+1.5))
    vals2.append((n, 0.35*n*n-0.27*n+3.75))

c_data =XyChartData()                # CategoryChartDataオブジェクトを作成

s1 = c_data.add_series('系列1')           # 系列名()の設定
s2 = c_data.add_series('系列2') 

for val in vals1:
    s1.add_data_point(val[0], val[1])       # 系列1にデータセットを設定

for val in vals2:
    s2.add_data_point(val[0], val[1])       # 系列2にデータセットを設定
#--------------------------------------------------------------------------

prs = Presentation()
sld0 = prs.slides.add_slide(prs.slide_layouts[6])

# グラフ(散布図)の追加
# shapesコレクションにchartオブジェクト(棒グラフ)を追加

# 引数にグラフ種類、位置、先に作ったデータを渡す

ch = sld0.shapes.add_chart(XL_CHART_TYPE.XY_SCATTER,
                          Cm(5), Cm(6), Cm(18), Cm(13), c_data).chart

#--------------------------------------------------------------------------
# [軸の設定]

axis = ch.value_axis         			        # value_axisオブジェクト(値軸)の取得
axis.has_title = True       			        # 軸のタイトルを有効
axis.axis_title.text_frame.text = "Y" 		# 軸のタイトル名の設定

#--------------------------------------------------------------------------
# [マーカーの設定]

sers = ch.series                    # 系列を取得

sers[0].marker.style = XL_MARKER_STYLE.CIRCLE   	  # 系列1のマーカースタイルを設定(〇)
sers[0].marker.size = 8                           	# 系列1のマーカーサイズを設定

sers[1].marker.style = XL_MARKER_STYLE.TRIANGLE   	# 系列2のマーカースタイルを設定(△)
sers[1].marker.size = 8                           	# 系列2のマーカーサイズを設定

prs.save('Blog_散布図の作成.pptx')

ポイントを解説します。その他はコード内のコメントを参照してください。

10,11/13~15行目でX,Y対のデータセット(タプルのリスト)を20プロット用意します。17行目でXyChartDataクラスのインスタンスを生成し、19,20行目で系列、22,23と25,26行目で先につくったリストのデータをそれぞれ、add_series関数add_data_point関数で設定します

そして、37行目のadd_chart関数の引数に散布図を意味する定義(XL_CHART_TYPE.XY_SCATTER)と、先に作ったChartDataオブジェクトを引数に渡して、Shapeオブジェクト(グラフ)を作ります。

続いて、43~45行目でY軸のタイトルの設定を有効にしてテキスト(Y)を設定します。50~56行目でマーカーの形とサイズを指定しグラフを整えます。

実行例は以下のようになりました。

散布図の作成と軸ラベルの追加
図9 List2実行結果(散布図)

➀ 散布図が表示されました。

➁ Y軸にラベルが追加されました。

➂ プロットにマーカー(〇、△)が表示されました。

3. まとめ

いかがでしたでしょうか?

今回は「python-pptxライブラリ」を使って、グラフ作成する手順について解説してきました。

客観的に分かりやすい資料をつくるコツの一つは、数値などのデータから「どのようなことが言えるのか?」「今後の期待値の予測はどうなるか?」といったことを「グラフ」で示すことです。

今回紹介したテクニックを活用することで、PythonだけでPowerPoint用のグラフを描画することができるのです。

最後にここまでの記事内容をまとめておきましょう。

➀. Python-pptxではグラフをShapeオブジェクトとして管理している。Shapeオブジェクトは、add_chart()メソッドでスライドに追加する。

➁.グラフの参照情報はChartDataオブジェクトで定義するが、グラフの形態(系列ごとのX軸の共有方法の違い)によって2つのクラスを使い分ける。

(CategoryChartDataクラスとXyChartDataクラス)

➂. グラフの構成要素や装飾の設定は、さらにChartオブジェクトを取得した上で配下の属性で行う。


さて、次回はスライドにテーブル(表)を挿入する方法について解説をします。

テーブルもまた、データの整理や見やすい資料づくりの大事な要素となります。

次回もポイントを絞り分かりやすく解説しますので、参考にして頂けたら幸いです。リンク先はこちらになります。↓

最後までお読み頂きありがとうございました。

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