PowerPoint では、売上データや製品比較、年度別の実績などを視覚的に表現するために、縦棒グラフがよく使用されます。手作業でグラフを作成することもできますが、大量のプレゼンテーションを生成したり、定期レポートを自動作成したりする場合は、Python による自動化がより効率的です。 この記事では、Spire.Presentation for Python を使用して、PowerPoint に以下の 2 種類の縦棒グラフを作成する方法を紹介します。 集合縦棒グラフ(Clustered Column Chart) 積み上げ縦棒グラフ(Stacked Column Chart) Spire.Presentation for Python のインストール まず、次のコマンドを実行して Spire.Presentation for Python をインストールします。 pip install Spire.Presentation または、Spire.Presentation for Python のダウンロードページ から手動でライブラリをインストールすることもできます。 インストールが完了したら、Python コードから PowerPoint ファイルの作成、編集、グラフの追加などを行うことができます。 Python で PowerPoint に集合縦棒グラフを作成する 集合縦棒グラフは、複数のデータ系列をカテゴリごとに並べて比較する場合に適しています。たとえば、複数店舗の売上を製品別に比較するようなケースで利用できます。 Spire.Presentation for Python では、ChartType.ColumnClustered を指定することで集合縦棒グラフを作成できます。 以下のコードでは、「店舗 A」と「店舗 B」の飲料売上データを比較する集合縦棒グラフを PowerPoint に追加しています。 from spire.presentation.common import * from spire.presentation import * # Create a Presentation object presentation = Presentation() # Set slide size type presentation.SlideSize.Type = SlideSizeType.Screen16x9 # Get the first slide slide = presentation.Slides[0] # Add clustered column chart rect = RectangleF.FromLTRB(40, 80, 700, 450) chart = slide.Shapes.AppendChartInit(ChartType.ColumnClustered, rect, False) # Set chart title chart.ChartTitle.TextProperties.Text = "炭酸飲料の売上" chart.ChartTitle.TextProperties.IsCentered = True chart.ChartTitle.Height = 25 chart.HasTitle = True # Insert text to chart as series labels chart.ChartData[0,0].Text = "製品" chart.ChartData[0,1].Text = "店舗 A" chart.ChartData[0,2].Text = "店舗 B" # Insert text to chart as category labels chart.ChartData[1,0].Text = "ダイエットコーク" chart.ChartData[2,0].Text = "マウンテンデュー" chart.ChartData[3,0].Text = "ダイエットペプシ" chart.ChartData[4,0].Text = "チェリーコーク" # Insert numbers to chart as values of series Series1 = [35000, 46000, 28000, 52000] Series2 = [41000, 32000, 36000, 40000] i = 0 while i < len(Series1): chart.ChartData[i + 1,1].NumberValue = Series1[i] chart.ChartData[i + 1,2].NumberValue = Series2[i] i += 1 # Set series labels chart.Series.SeriesLabel = chart.ChartData["B1","C1"] # Set category labels chart.Categories.CategoryLabels = chart.ChartData["A2","A5"] # Set values for series chart.Series[0].Values = chart.ChartData["B2","B5"] chart.Series[1].Values = chart.ChartData["C2","C5"] # Set gap width chart.GapWidth = 350 # Set overlap chart.OverLap = -50 # Set fill color of each series chart.Series[0].Fill.FillType = FillFormatType.Solid chart.Series[0].Fill.SolidColor.Color = Color.get_CadetBlue() chart.Series[1].Fill.FillType = FillFormatType.Solid chart.Series[1].Fill.SolidColor.Color = Color.get_LightBlue() # Add data labels for i in range(len(Series1)): chart.Series[0].DataLabels.Add() chart.Series[1].DataLabels.Add() # Save the document presentation.SaveToFile("output/集合縦棒グラフ.pptx", FileFormat.Pptx2019) presentation.Dispose() 実行結果 コードのポイント まず、Presentation() を使用して PowerPoint プレゼンテーションを作成し、スライドサイズを 16:9 に設定しています。 presentation = Presentation() presentation.SlideSize.Type = SlideSizeType.Screen16x9 続いて、最初のスライドを取得し、AppendChartInit() メソッドを使って集合縦棒グラフを追加します。 slide = presentation.Slides[0] rect = RectangleF.FromLTRB(40, 80, 700, 450) chart = slide.Shapes.AppendChartInit( ChartType.ColumnClustered, rect, False ) RectangleF.FromLTRB() では、スライド上でのグラフの位置とサイズを指定しています。 次に、ChartData を使用してグラフ内部のデータシートに系列名、カテゴリ名、数値データを書き込みます。 chart.ChartData[0,1].Text = "店舗 A" chart.ChartData[0,2].Text = "店舗 B" さらに、カテゴリとして製品名を登録します。 chart.ChartData[1,0].Text = "ダイエットコーク" chart.ChartData[2,0].Text = "マウンテンデュー" chart.ChartData[3,0].Text = "ダイエットペプシ" chart.ChartData[4,0].Text = "チェリーコーク" 数値データは Python のリストとして用意し、ループを使用してグラフデータに書き込みます。 Series1 = [35000, 46000, 28000, 52000] Series2 = [41000, 32000, 36000, 40000] その後、系列ラベル、カテゴリラベル、各系列の値をそれぞれ設定します。 chart.Series.SeriesLabel = chart.ChartData["B1","C1"] chart.Categories.CategoryLabels = chart.ChartData["A2","A5"] chart.Series[0].Values = chart.ChartData["B2","B5"] chart.Series[1].Values = chart.ChartData["C2","C5"] 集合縦棒グラフでは、棒同士の間隔や重なり具合も調整できます。 chart.GapWidth = 350 chart.OverLap = -50 さらに、各データ系列の塗りつぶし色を変更し、グラフを見やすくしています。 chart.Series[0].Fill.FillType = FillFormatType.Solid chart.Series[0].Fill.SolidColor.Color = Color.get_CadetBlue() 最後に、各データポイントにデータラベルを追加して、PowerPoint ファイルとして保存します。 presentation.SaveToFile( "output/集合縦棒グラフ.pptx", FileFormat.Pptx2019 ) これにより、製品ごとに「店舗 A」と「店舗 B」の値が横に並んだ集合縦棒グラフが作成されます。 Python で PowerPoint に積み上げ縦棒グラフを作成する 積み上げ縦棒グラフは、複数の系列を 1 本の棒の中に積み上げて表示するグラフです。カテゴリごとの合計値と、各系列が全体に占める割合を同時に確認したい場合に適しています。 Spire.Presentation for Python では、ChartType.ColumnStacked を使用して積み上げ縦棒グラフを作成できます。 以下のコードでは、先ほどと同じ飲料売上データを積み上げ形式で表示します。 from spire.presentation.common import * from spire.presentation import * # Create a Presentation object presentation = Presentation() # Set slide size type presentation.SlideSize.Type = SlideSizeType.Screen16x9 # Get the first slide slide = presentation.Slides[0] # Add a stacked column chart rect = RectangleF.FromLTRB(40, 80, 700, 450) chart = slide.Shapes.AppendChartInit(ChartType.ColumnStacked, rect, False) # Set chart title chart.ChartTitle.TextProperties.Text = "炭酸飲料の売上" chart.ChartTitle.TextProperties.IsCentered = True chart.ChartTitle.Height = 25 chart.HasTitle = True # Insert text to chart as series labels chart.ChartData[0,0].Text = "製品" chart.ChartData[0,1].Text = "店舗 A" chart.ChartData[0,2].Text = "店舗 B" # Insert text to chart as category labels chart.ChartData[1,0].Text = "ダイエットコーク" chart.ChartData[2,0].Text = "マウンテンデュー" chart.ChartData[3,0].Text = "ダイエットペプシ" chart.ChartData[4,0].Text = "チェリーコーク" # Insert numbers to chart as values of series Series1 = [35000, 46000, 28000, 52000] Series2 = [41000, 32000, 36000, 40000] i = 0 while i < len(Series1): chart.ChartData[i + 1,1].NumberValue = Series1[i] chart.ChartData[i + 1,2].NumberValue = Series2[i] i += 1 # Set series labels chart.Series.SeriesLabel = chart.ChartData["B1","C1"] # Set category labels chart.Categories.CategoryLabels = chart.ChartData["A2","A5"] # Set values for series chart.Series[0].Values = chart.ChartData["B2","B5"] chart.Series[1].Values = chart.ChartData["C2","C5"] # Set gap width chart.GapWidth = 350 # Set fill color of each series chart.Series[0].Fill.FillType = FillFormatType.Solid chart.Series[0].Fill.SolidColor.Color = Color.get_CadetBlue() chart.Series[1].Fill.FillType = FillFormatType.Solid chart.Series[1].Fill.SolidColor.Color = Color.get_LightBlue() # Add data labels for i in range(len(Series1)): chart.Series[0].DataLabels.Add() chart.Series[1].DataLabels.Add() # Save the document presentation.SaveToFile("output/積み上げ縦棒グラフ.pptx", FileFormat.Pptx2019) presentation.Dispose() 積み上げ縦棒グラフの基本的な作成手順は、集合縦棒グラフとほぼ同じです。主な違いは、グラフ作成時に指定するチャートタイプです。 chart = slide.Shapes.AppendChartInit( ChartType.ColumnStacked, rect, False ) 実行結果 コードのポイント ChartType.ColumnStacked を指定すると、各カテゴリの「店舗 A」と「店舗 B」の値が 1 本の棒の中に積み上げて表示されます。 集合縦棒グラフのように系列間の横方向の重なりを調整する必要がないため、この例では OverLap の設定は使用していません。 そのほか、タイトル、データ、系列、カテゴリ、色、データラベルなどの設定方法は集合縦棒グラフとほぼ共通です。 集合縦棒グラフと積み上げ縦棒グラフの使い分け 2 種類のグラフは同じデータを表示できますが、適している用途が異なります。 集合縦棒グラフ は、系列ごとの値を直接比較したい場合に向いています。たとえば、「店舗 A」と「店舗 B」の売上のどちらが高いかを製品ごとに確認する場合に適しています。 一方、積み上げ縦棒グラフ は、カテゴリごとの合計値と、その内訳を確認したい場合に便利です。複数系列を 1 本の棒として表示するため、全体のボリュームを比較しやすいという特徴があります。 用途に応じて適切なグラフタイプを選択すると、PowerPoint 上でデータをより分かりやすく表現できます。 まとめ この記事では、Spire.Presentation for Python を使用して PowerPoint に集合縦棒グラフと積み上げ縦棒グラフを作成する方法を紹介しました。 AppendChartInit() メソッドでグラフを追加し、ChartData を使用して系列名、カテゴリ、数値を設定することで、Python から PowerPoint グラフを柔軟に生成できます。また、グラフタイトル、系列色、棒の間隔、データラベルなどもコードから細かく調整できます。 この方法を利用すれば、売上レポート、業績報告、データ分析資料などの PowerPoint プレゼンテーションを自動生成するワークフローにも活用できます。 Spire.Presentation for Python の機能を評価制限なしで体験したい場合は、30 日間無料トライアルライセンス を申請できます。