本記事ではExcelをPythonで操作する「openpyxl」ライブラリの解説をしていきます。
Excelには多くの機能が搭載されておりますので、ひと記事で全てを網羅することはできません。大項目(機能)ごとに分けて連載記事【Python×Excel】としてまとめています。
これまでの連載の中で、openpyxlを使う上での必須事項を取り上げています。以降の解説を読み進めていくにはある程度、前提知識を必要としますので関連記事もあわせて参考にして下さい。
ブックの作成・保存、ワークシートの追加、それから行、列、セル、各オブジェクトの取得とその操作については<連載1,2回目>が参考になります。
セルの書式設定(フォントや罫線など装飾)に関しては<連載3,4回目>で解説しています。
さて、【連載7回目】となる今回は「Excelにグラフを挿入する手順」の概要について解説していきます。グラフは、「データの見える化」を行う上で極めて重要な役割を果たします。 たとえば、月々の売上データをグラフの定型フォーマットにまとめて推移を可視化するといったことはよくあることでしょう。
グラフはExcelの主要機能の一つですから、openpyxlにもグラフの関するクラスやメソッドが多数用意されています。
Excelのグラフ作成をプログラムで自動化できれば面倒な定型作業を一瞬で終わらせることができます。Excelと相性抜群のPythonで操作できる点も見逃せません。
ご承知のとおりExcelで扱うことができるグラフには多くの種類があります。
1記事の中でその全てを網羅することは困難ですので、今回も【概要編】【実践編】と複数回に分けて解説を進めていきます。
【概要編】となる今回はグラフ作成の手順(フロー)と必須クラスの詳細仕様およびオブジェクトの階層構造の解説に焦点を当てます。
【実践編】となる次回以降は、「折れ線グラフ」「棒グラフ」「散布図」といったグラフ種別ごとの作成事例とTipsを紹介していきます。
この記事を読むことで、次のようなことが「できる・わかる」ようになりますので最後までお付き合いください。
本サイトでの紹介内容は一例です。また、関数などの省略可能なオプション引数などについては割愛していますので、詳細や不明点などは必要に応じて公式サイトなどを参照してください。
【公式ドキュメント】https://openpyxl.readthedocs.io/en/stable/
それでは、次節よりopenpyxlによる「グラフ作成の基本事項」と「グラフタイプごとの手順(フロー)」について解説をしていきます。
1. openpyxlによるグラフ作成の基本
Excelには折れ線、棒グラフ、散布図、円・・・といったように様々な使途に最適なグラフを作成できます。本節では、openpyxlによるグラフ作成についての「基本的な考え方」と「手順(フロー)」について解説します。
まずは、グラフ作成の基本事項として「用語表現の統一」と「グラフを構成する要素」についてここで整理しておきましょう。
次の図2は、ある年の一年間の降水量を各都市別に示した2次のテーブル(表)から、横軸(X軸)を月、縦軸(Y軸)を降水量とした「折れ線グラフ」を描画する例を示しています。
一般的にExcelでは、横軸(X軸)の要素のことを【項目】もしくは【カテゴリ(Categories)】と呼びます。(青色の枠線内)
また、グラフのプロットエリアには複数本の都市別の折れ線グラフが重なっていますが、これらの要素を【系列】もしくは【シリーズ(Series)】と表現します。(紫色の枠線内)
Excelでは、項目と系列は自由に入れ替えることができます。そのため、テーブルの行列が「項目」「系列(カテゴリ)」のどちらを指定しているのかを常に意識してグラフを作成する必要があります。
そして、「項目名」と「系列名」とで一意に決まる、個々の要素が、プロットエリアに【データ】として表示されます。(赤色の枠線内)
さらに、以下(図3)はExcelにおけるグラフの編集ウィンドウ(データの選択)です。左が【系列(シリーズ)】、右が【項目(カテゴリ)】のデータを指し、「編集ボタン」でそれぞれの参照範囲を設定できます。
以降では、グラフに関するこれらの前提知識がを元に、具体的な「各種オブジェクトの扱い」と「グラフ作成の手順」について詳しく解説を進めます。
1.1 グラフを構成する要素(オブジェクト)について
グラフを構成する要素には図4のようなものがあります。
タイトルや凡例・X(Y)軸などのように、グラフの種類を問わず共通の要素がある一方で、プロットエリア内の、マーカー・ライン・ラベルなどグラフのタイプに応じて異なるものもあります。
プログラムでグラフを作るということは、これら構成要素一つ一つに対して必要なデータや属性を設定していくことを意味しています。
Excelは「Workbook(ブック)」をはじめとして「Worksheet(シート)」「Row(行)/Coloumn(列)」「Cell(セル)」…といったようにクラス(オブジェクト)同士が関係し、階層構造を成しています。<参考:連載1回目>
これはグラフにおいても同様で、グラフ本体となるChartオブジェクトを頂点に、その配下には図5のような様々なクラス(オブジェクト)によるレイヤー構造になっています。
タイトルや凡例などChartオブジェクト直下の属性で設定・取得できる構成要素もありますし、X(Y)軸、系列データのように、オブジェクト間の親子関係を意識する必要の要素もあります。後者は、メソッドや属性(プロパティ)を縦続して取得と設定を行います。
グラフ要素のオブジェクトについてはこのあとの節で詳しく解説します。
以上、グラフの概要をご理解いただいたことろで、次項からはグラフ作成の手順(フロー)について解説していきます。
1.2 openpyxlによるグラフ作成のフロー
本項では、グラフ作成の手順(フロー)について解説をします。
大まかな手順は、どのような種類のグラフであっても共通しており、簡単にまとめると次の3ステップで対応できます。
➀. Chartオブジェクト を取得する
➁. データ・カテゴリを参照するオブジェクトを定義し➀の Chartオブジェクト に設定する
➂. Worksheetオブジェクト に➁の Chartオブジェクト を追加する
もう少し、手順を細分化してみます。
➁の「データ」と「カテゴリ」を参照するオブジェクトの定義に関する部分については、目的のグラフの種別(たとえば、折れ線グラフや散布図など)によって2通りの方法があります。
1つ目の方法は、複数の系列データを一括してまとめて参照オブジェクト( Referenceオブジェクト )を定義するものです。すべての系列において、共通の項目(X軸)を共有するタイプのグラフに適用することができます。(例えば、折れ線グラフ、棒グラフなど)
2つ目の方法は、個々の系列データごとに、項目(X軸)の参照データとY軸の参照データ、それぞれの Referenceオブジェクト を定義して、Seriesオブジェクト にまとめることもできます。
つまり、系列ごとに、異なる項目(X軸)の値を指定することができるタイプのグラフに適用することができます。(散布図、バブルチャートなど)
もちろん、すべての系列において同じ項目(X軸)の値を参照することができるので、すべてのグラフタイプに対応できます。図6 データとカテゴリを参照するオブジェクト
以上、データの参照情報を管理する Referenceオブジェクト と Seriesオブジェクト の2つがあることを踏まえて、次項よりグラフ作成の手順について解説を進めます。
1.2.1 複数の系列をまとめて参照する
折れ線、棒グラフなど、各系列によって同じ項目(X軸の値)を共有するタイプのグラフは、すべての系列データをまとめて Referenceオブジェクト として一括参照できます。
グラフ作成の手順は図7のようになります。
図7のブロック(➀~➆)について解説します。
➀.【Chartオブジェクトを取得する】
Chartオブジェクト はグラフ本体(フレームワーク)となります。
グラフのタイプごとに専用のクラスが用意されています。例えば、「折れ線グラフ」であればLineChartクラス からLineChartオブジェクトを取得します。
➁.【Chartオブジェクトにグラフの要素を追加する】
グラフを構成する要素には、タイトル、凡例、軸のタイトルなどがあります。
これらは、Chartオブジェクト 配下の属性(プロパティ)によって追加・設定します。
➂.【データの参照情報をReferenceオブジェクトとして定義する】
グラフが参照するセル範囲を Referenceオブジェクト として定義します。参照するセル範囲は、「系列名を含めたデータ領域」と「項目名」の2つです。(図8) Referenceクラス は<2.2項>を参照願います。
➃.【Chartオブジェクトにデータを設定する】
➂で定義したデータ領域を指す Referenceオブジェクト を add_data()メソッド でChartオブジェクトに追加します。
➄.【Chartオブジェクトに項目名(カテゴリ)を設定する】
➂で定義した項目名(カテゴリ)を指す Referenceオブジェクト を set_categories()メソッド でChartオブジェクトに追加します。
➅.【系列データごとに装飾効果を適用する】
グラフの個々の系列データは Seriesオブジェクト として管理されています。マーカーやライン、塗り潰しなどプロットエリア内の装飾効果は、Seriesオブジェクト配下の属性にて設定します。
Seriesオブジェクトは、Chartオブジェクトの seriesプロパティ で取得できます。
➆.【Worksheetにグラフを挿入する】
最後にWorksheetオブジェクトの add_chart()メソッド の引数に、これまでに定義してきたChartオブジェクトとグラフの挿入位置を指定してワークシートに挿入します。
add_chart()メソッドの書式は以下のとおりです。
1.2.2 系列ごとに参照オブジェクトを定義する
散布図やバブルチャートなどのように個々の系列によって異なる項目(X軸の値)を設定することができるタイプのグラフの場合は、<1.2.1項>のように、複数の系列をまとめて一括参照することはできません。
各系列ごとに項目(X軸のデータ)とそれに対応する値(Y軸のデータ)とを組合わせて Seriesオブジェクト
として管理します。(X軸、Y軸のそれぞれの値は、同様に Referenceオブジェクト として定義します。)
グラフ作成の手順は図9のようになります。
先の<1.2.1項>「複数の系列をまとめて参照する」の手順と異なるブロックのみを以降で解説します。
➂.【系列データごとに参照情報を定義する】
系列ごとに異なる項目(X軸の値)を指定できるので、系列ごとに「X軸の値の参照データ」と「Y軸の値の参照データ」を Referenceオブジェクト で定義します。(②-1, ➁-2)
個々の系列データは、Series クラス でX軸とY軸の「Referenceオブジェクト」と系列名で紐づけられSeriesオブジェクト にまとめられます。(②-3)
グラフ(Chartオブジェクト)のすべての系列データは、Seriesコレクションで管理されます。series.append()メソッド でコレクションに追加します。(②-4)
➁.は系列ごとに繰り返す必要があるので、For文やWhile文などで繰り返し処理を実行します。
なお、Seriesクラス/コレクションについてはこの後<2.3項>で解説します。
次の図10はExcelの「系列の編集ウィンドウ」で系列を追加している様子です。系列ごとに「系列名」「系列Xの値(X)」「系列Yの値(Y)」の参照範囲を設定していますが、これと同じことをSeriesオブジェクトの取得の際にも行われます。
<1.2.1項>の add_data()メソッド は不要となります。また、Seriesクラスの引数に系列名を指定してオブジェクトを取得した場合は、set_categories()メソッドも不要です。
以上、「グラフの構成オブジェクト」と「openpyxlによるグラフ作成手順」についてでした。以降の節からは、各種クラスや属性の仕様についてまとめます。
2. グラフの構成要素(オブジェクト)
ここまでは、グラフを構成するオブジェクトのレイヤー構造<1.1項>やグラフの作成手順(フロー) <1.2項>について概要を解説してきました。
本節では、グラフ作成で必要となるクラスの詳細仕様についてあらためて紹介します。また、配下の主要な「オブジェクト」「メソッド(属性)」についても解説します。
2.1 グラフ本体(Chartオブジェクト)について
グラフの本体(フレームワーク)となる Chartオブジェクト は、グラフの種類(折れ線・棒グラフ・散布図など…)に応じて専用のクラスが用意されています。
たとえば、一般的な「折れ線」であれば次のように LineChartクラス からChartオブジェクトを取得します。その他の、グラフのChartクラスについては<3.項>で紹介します
次項では、Chartオブジェクトに「データを設定するメソッド(属性)」やタイトルや軸の設定など「グラフの構成要素を追加・設定する属性」について個別に解説します。
2.1.1 Chartオブジェクトにデータを設定する
はじめに、プロットするデータ(系列名や項目名を含む)を設定するメソッド・属性についてです。<1.2項>で解説したとおり、各系列の項目(X軸)の共有方法によって2とおりのデータ設定があるのでした。
項目を共有するタイプのグラフにデータを設定するには add_data()メソッド を、項目名を設定するには set_categories()メソッド を次の書式にようにして使います。
2つのメソッドの 引数:data には、セルの参照情報である Referenceオブジェクト を設定します。
(詳細は後述)
また、add_data()メソッドの 引数:titles_from_data には、参照元の各列の先頭要素を系列名とする場合には「True」と指定します。デフォルトは「False」(系列名として引用しない)です。(図8参照)
さらに、Chartオブジェクトには series という極めて重要な属性があります。これは、グラフがもつすべての系列情報をまとめた Seriesコレクション を返します。
インデックスを指定して所望の系列情報(Seriesオブジェクト)を個別に取得できます。また、SeriesコレクションはイテラブルにFor-in構文などで、シーケンシャルに個々のオブジェクトを取得することもできます。(Seriesオブジェクトについては後述します。)
コレクションに新たなSeriesオブジェクトを追加するには、コレクションに対して append()メソッド を実行します。
以上が、Chartオブジェクトにデータ(系列データ)を設定/取得するメソッドになります。
2.1.2 Chartオブジェクトに構成要素を追加・設定する
グラフには、「タイトル」や「凡例」「X,Y軸」などデータが表示されるプロットエリア以外にも構成要素があります。(図4/5)
これらはChartオブジェクト配下の各種属性(プロパティ)によって設定・取得ができます。主たるものを以下<表1>にまとめました。
Chartオブジェクト.属性名 | 機能 | その他・関連オブジェクト |
---|---|---|
title | グラフのタイトルを取得・設定する | |
style | グラフのスタイルを取得・設定する | 整数で指定 |
legend | 凡例の有効・無効を設定する | Noneで無効(デフォルトは有効) |
y_axis | y_axisオブジェクト (Y軸)を取得する | y_axisオブジェクトの主な属性 ・titleプロパティ(Y軸のタイトルを設定/取得する) ・crossAxプロパティ(X軸との交差値を設定する) |
x_axis | x_axisオブジェクト (X軸)を取得する | x_axisオブジェクトの主な属性 ・titleプロパティ(X軸のタイトルを設定/取得する) ・number_formatプロパティ(X軸の書式を設定する) |
series | Seriesコレクションを取得する | Seriesオブジェクトの主な属性 ・markerプロパティ(マーカーを設定する) ・graphicalPropertiesプロパティ(色やラインの設定をする) |
タイトル(title)、スタイル(style)、凡例(legend)などの要素は、Chartオブジェクト直下の属性レイヤーで設定と取得ができます。
一方、軸(X/Y)、系列については上記属性で各オブジェクトを取得した後に、さらに配下の属性レイヤーを掘り下げてアクセスします。(図11)
プロットエリアの要素である「系列」や「マーカ」「ラベル」「ライン」などはSeriesオブジェクト配下の属性にて対応します。<2.3項>Seriesオブジェクトで解説します。
以上、Chartオブジェクトについて「データを設定するメソッド」と「構成要素を追加・設定する属性」について紹介しました。
2.2 セルの参照情報を管理する(Referenceオブジェクト)
グラフのデータ(系列名を含む)や項目(カテゴリ)などのセル範囲の参照情報は、Referenceオブジェクトで管理されます。Referenceオブジェクトは次の書式のようにして取得します。
セルの参照範囲の指定には2通りの方法があります。
第2~5引数に行番号と列番号を指定する方法(図12参照)と、第6 引数:range_string で文字列(例えば‘A1:C3’)で指定する方法の2つです。前者の場合は、“A1”セルを基準に1行、1列番目となりますので注意してください。
また、Chartオブジェクトの add_data()メソッド の 引数:titles_from_data を”True”‘(有効)とした場合は先頭行の要素(※)が系列名として認識されます。例えば図12のテーブルであれば、“D4~G4”が系列名となります。
※引数titles_form_dataで系列名を指定できるのはあくまで先頭行の要素です、先頭列ではありませんので、テーブルは図12のような配置にしておかなければなりません。
2.3 系列データを管理する(Seriesオブジェクト)
個々の系列データは、以下の書式で取得する Seriesオブジェクト として扱います。
第1~3引数には、それぞれY軸、X軸、Z軸が参照するセル範囲情報(Referenceオブジェクト)を指定します。なお、第3引数:zvalues はバブルチャートなど3次元での表現を必要とする場合にのみ使用します。
また、系列名は 第4引数:title に直接文字列で指定するか、もしくは 第5引数:title_from_data を“True”とすることで、引数valuesの先頭行の要素を系列名にできます。(add_data()メソッドと同じ用法)
Excelの系列の編集ウィンドウと各引数との関係は図13のようになります。
Seriesオブジェクトの配下には、多くの属性や関連(子)オブジェクトが連なるツリー構造を持ちます。図14のように、グラフのプロットエリアに関連する、マーカー(Markerオブジェクト)や線(Lineオブジェクト)、ラベルといった個別要素の設定や取得ができます。
Seriesオブジェクトの配下の主要属性を<表2>にまとめました。
Seriesオブジェクト.属性名 | 機能 | その他・関連オブジェクト |
---|---|---|
marker | Markerオブジェクト を取得する | 表3を参照 |
graphicalProperties.solidFill | Fillオブジェクト を取得する | 表5を参照 |
graphicalProperties.line | Lineオブジェクト を取得する | 表4を参照 |
smooth | 滑らかな線を描画する | True(有効)/False(無効) |
labels | データラベルを設定する | DataLabelListオブジェクト |
data_points | ポイントデータを設定する | リスト又はappendメソッドで追加 |
Seriesクラス(オブジェクト)のについては以上です。以降ではSeriesオブジェクト配下の主要オブジェクトである「Markerオブジェクト」と「Lineオブジェクト」「Fillオブジェクト」を紹介します。
その他の、属性については個各のグラフタイプの解説時に紹介することにします。
2.3.1 マーカー(Markerオブジェクト)
折れ線グラフなどのマーカーは、Seriesオブジェクト配下の Markerオブジェクト で管理されています。Markerオブジェクトは、marker属性 から取得することができます。以下<表3>のようにMarkerオブジェクトには、マーカーの形状(シンボル)や色、サイズを設定・取得できる多くの属性が用意されています。
Markerオブジェクト.属性名 | 機能 | その他・関連オブジェクト |
---|---|---|
symbol | マーカーの形状を設定する | 例(’triangle’ ,‘plus’, ‘diamond’等など) |
size | マーカーのサイズを設定する | 例(7.0など浮動小数点) |
graphicalProperties.solidFill | マーカーの塗り潰し | FF0000などのRGB指定の他、ColorChoiceオブジェクトにより設定できる |
graphicalProperties.line.solidFill | マーカーの枠線の色 | FF0000などのRGB指定の他、ColorChoiceオブジェクトにより設定できる |
symbol属性に指定するマーカーの形状は {‘plus’, ‘diamond’, ‘square’, ‘dash’, ‘dot’, ‘x’, ‘auto’, ‘circle’, ‘star’, ‘picture’, ‘triangle’} の中から選択します。
また、マーカの内部の塗り潰しや枠線の設定にはさらに graphicalProperties属性 や line属性 を繋げていきます。Lineオブジェクトについてはこの後、解説します。
Excelのマーカー設定ウィンドウと各属性の対応関係を図15に示します。
2.3.2 ライン(Lineオブジェクト)
openpyxlでは「折れ線のライン」や「マーカー等の枠線(エッジ・縁取り)」の色や幅、線種などに関する情報は Lineオブジェクト として管理されています。
LineオブジェクトはSeriesオブジェクトから graphicalProperties属性 line属性 の階層順で取得します。
また、先のマーカの場合のように、対象とするオブジェクト(Markerオブジェクト等)に対して、graphicalProperties属性を繋げる場合もあります。ただし、Lineオブジェクト以下の属性は、親オブジェクトによらず全て共通しています。主要な属性を以下<表4>にまとめました。
Lineオブジェクト.属性名 | 機能 | その他・関連オブジェクト |
---|---|---|
solidFill | 線の色を設定する | “00AAAA”などRGB指定の他ColorChoiceオブジェクトで設定 |
dashStyle | 線の種類を設定する | “sysDot”など規定値を指定する |
width | 線の太さを設定する | EMUsもしくはutilモジュールで単位変換して設定 |
noFill | 線をなくす | True(有効)/False(無効) |
線の種類は、dashStyle属性 で指定しますが、組込みスタイルとして {‘sysDashDot’, ‘dashDot’, ‘sysDash’, ‘dash’, ‘dot’, ‘lgDashDotDot’, ‘lgDashDot’, ‘sysDot’, ‘sysDashDotDot’, ‘solid’, ‘lgDash’} が用意されています。
線の色や太さは solidFill属性 width属性 で設定します。noFill属性 で線を非表示にすることもできます。
Lineオブジェクトには、これ以外にも数多くの設定可能な項目があります。図16はExcelの線の設定ウィンドウですが、始点や終点の形状やサイズなどの属性も用意されています。
詳細は割愛しますので、より細かい指定をしたい場合は以下の公式ドキュメントなどを参考にして下さい。
公式ドキュメント<openpyxl.drawing.line module>
https://openpyxl.readthedocs.io/en/stable/api/openpyxl.drawing.line.html#openpyxl.drawing.line.LineProperties
2.3.3 塗りつぶし効果(Fillオブジェクト)
すでに「Marker」や「Line」オブジェクトを単色で塗り潰すための属性として「solidFill」(表3,4)について紹介していますが、塗り潰し効果は「単色」だけでなく「パターン(模様)」「グラデーション(階調)」を適用することもできます。
塗りつぶしは、対象オブジェクト配下の graphicalProperties属性 から、更に目的の効果(単色・パターン・グラデーション)となる属性を繋げることで適用します。まとめると次の<表5>のようになります。
GraphicalPropertiesオブジェクト.属性名 | 機能 | その他・関連オブジェクト |
---|---|---|
solidFill | 単色で塗り潰し | ”00AAAA”などのRGB指定の他<ColorChoiceオブジェクト>により設定 |
pattFill | パターン塗り潰し | <PatternFillPropertiesオブジェクト>で設定する |
gradFill | グラデーション塗り潰し | <GradientFillPropertiesオブジェクト>で設定する |
noFill | 塗り潰しなし | True(有効)/False(無効) |
各属性へは、塗り潰し情報を定義する専用クラスからオブジェクトを取得し設定します。パータン効果であれば PatternFillPropertiesオブジェクト を、グラデーション効果であれば GradientFillPropertiesオブジェクト を定義し設定します。
図17は、Excelの塗り潰し設定ウィンドウと各属性の関係を示します。
具体的な設定方法については、各グラフの個別記事の中でサンプルコード内で随時解説します。
以上、グラフの構成する個別オブジェクトについて解説しました。次項ではopenpyxlが提供するグラフ機能の種類にはどのようなものがあるのか、グラフの本体(フレームワーク)であるChartオブジェクトについて紹介します。
3. グラフの種類(Chartオブジェクト)
openpyxlは、Excelで作成できる全タイプのグラフに対応しています。各タイプごとに専用のクラスが用意され、グラフ本体(フレームワーク)がChartオブジェクトで管理されます。
本節では、代表的なグラフタイプのChartクラスの紹介と各Chartオブジェクトにおける特殊プロパティやキーポイントについて解説します。(グラフそのものの解説はExcelの専門書に譲ります。)
また、それぞれの具体的なプログラム例は別記事にて紹介しています。
3.1 折れ線グラフ
X軸(項目名)とY軸(値)の対となるデータをプロット、各プロット間をラインで結ぶグラフでもっとも一般的な形態のグラフです。データの参照方法は、全ての系列情報をReferenceオブジェクトにまとめて一括参照できます。(Seriesオブジェクトによる個別参照も可能です。)
散布図との違いは、X軸の値を各系列で共有する点にあります。
折れ線グラフを定義するためのクラスとして、次の LineChartクラス(平面) と LineChart3Dクラス(立体) の2種類が用意されています。
さらに、Chartオブジェクトの grouping属性 によってグラフの形態を「“standard”(標準)」「“stacked”(積み上げ)」「“percentstacked”(100%積み上げ)」の3つの中から選択できます。
各タイプの解説は図18にようになります。
折れ線グラフの具体的な作成手順は、以下の記事でサンプルコードを交えて丁寧に解説しています。こちらもあわせてご参照下さい。
3.2 棒グラフ
折れ線グラフと同様にX軸(項目)は各系列で共通の値をとります。よって、データの参照方法は、全ての系列情報をReferenceオブジェクトにまとめて一括参照します。(Seriesオブジェクトによる個別参照も可能です。)
棒グラフを定義するためのクラスとして、次の BarChartクラス(平面) と BarChart3Dクラス(立体) の2種類が用意されています。
Chartオブジェクトの type属性 によって棒(バー)の向きを「“col”(横棒グラフ)」「“bar”(縦棒グラフ)」から選択できます。補足としてtype属性を「”col”」とした場合はX軸とY軸が反転してしまいますので注意しましょう。
さらに、Chartオブジェクトの grouping属性 によってグラフの形態を「”standard”(標準)」「“stacked chart”(積み上げ)」「“percentStacked”(%積み上げ)」の3タイプの中から選択できます。
また、積み上げタイプの棒グラフであることが前提ですが、Chartオブジェクトには overlap属性 というものがって、上下の項目棒の横方向の隣接度合いを%(整数)で調整することができます。
各タイプの解説は図19にようになります。
棒グラフの具体的な作成手順は、以下の記事でサンプルコードを交えて丁寧に解説しています。こちらもあわせてご参照下さい。
3.3 散布図/バブル
散布図(バブルチャート)は、X軸の値(項目名)を各系列ごとに異なる値をとれる点が、折れ線グラフなどと異なります。(もちろん、すべて系列で同じ項目名を参照しても問題ありません。)
このようなことから、散布図は<1.2.2項>の作成手順のように系列ごとにSeriesオブジェクトを定義する必要があります。
散布図は ScatterChartクラス 、バブルチャートは BubbleChartクラス からChartオブジェクトを取得します。
グラフの形態には図20のようなものがあります。
散布図は、Markerオブジェクトによるプロット以外にも、line属性(直線)、smoth属性(滑らか線)を使って、線で結ぶこともできます。
X軸の値(項目)を系列ごとに設定できるメリットを生かして、より柔軟な折れ線グラフをつくることができます。
散布図・バブルチャートの具体的な作成手順は、以下の記事でサンプルコードを交えて丁寧に解説しています。こちらもあわせてご参照下さい
3.4 面グラフ
面グラフは折れ線の下部を塗りつぶしたグラフであり、生成方法や使う属性も類似しています。
面グラフを定義するためのクラスも、AreaChartクラス(平面)と AreaChart3Dクラス(立体)の2種類があります。
さらに、Chartオブジェクトの grouping属性 によってグラフの形態を「“standard”(標準)」「“stacked”(積み上げ)」「 “percentstacked”(100%積み上げ)」の3つの中から選択できます。
各タイプの解説は図21にようになります。
3.5 円グラフ
円グラフは、項目(カテゴリ)の割合を円状に表示したグラフです。各項目(カテゴリ)はトップを0°として時計回りに順番に並びます。
標準的な円グラフは Piechartクラス にて定義できる他、項目を一部抜粋して、さらに補助円や補助棒グラフを表示できる ProjectedPieChartクラス があります。
Chartオブジェクトの data_points属性 により円グラフの一部を切り出して、強調表示することができます。
また、ProjectedPieChartオブジェクト の type属性 で補助円(棒)の選択ができ「”pie”」で補助円、「“bar”」で積み上げ棒グラフとなります。各タイプの解説は図22にようになりま
4. まとめ
いかがでしたでしょうか?
Excelを操作する外部ライブラリ「openpyxl」で、グラフを作成する手順と必要なクラス(オブジェクト)についてまとめました。
openpyxlライブラリのchartモジュールには、グラフを操作するための多くのクラスが用意されていますが、今回紹介したものは、必ずマスタすべき必須Tipsとなります。
また、今回は具体的なプログラムについて掲載していませんが、どのようなタイプのグラフであっても手順の概要は以下のようになります。
➀. Chartオブジェクトを取得する。
➁. データ・カテゴリの参照オブジェクトを取得し、Chartオブジェクトに設定する。
➂. Worksheetオブジェクトに➁のChartオブジェクトを追加する。
以上の手順をどのようにコードに落とし込んでいくのかについては、次回解説していきたいと思います。
データの可視化にグラフは欠かせません。
是非、本記事のがopenpyxlによるグラフ作成の一助になれば幸いです。
最後までお読みいただきありがとうございました。