PythonでExcelのチャートを作成する方法

PythonでExcelのチャートを作成する方法

チャートは、生のスプレッドシートデータを視覚的な洞察に変換します。Aspose.Cells FOSS for Python を使用すると、Microsoft Excel を必要とせずに、データ系列、カテゴリラベル、チャートタイトル、位置を完全に制御しながら、列、折れ線、棒、円グラフをプログラムで作成できます。

Aspose.Cells FOSSでチャートを作成する理由は?

  1. Excelは不要: 任意のOSでPythonだけでチャートを作成します。
  2. タイプ別メソッドAPI: add_bar()add_line()add_pie()add_area()、その他を使用し、チャートタイプごとに1つのメソッドです。
  3. 名前付きシリーズ: 各シリーズを name=category_data= キーワード引数で設定します。
  4. 正確な配置: セル座標 (top_row, left_col, bottom_row, right_col) でチャートの範囲を制御します。

ステップバイステップガイド

ステップ 1: Python 用 Aspose.Cells FOSS をインストール

pip install aspose-cells-foss

ステップ 2: ワークブックを作成し、データを入力する

新しいワークブックを作成し、数値データとカテゴリラベルをセルに書き込みます:

from aspose.cells_foss import Workbook, Cell

workbook = Workbook()
ws = workbook.worksheets[0]
ws.name = "Sales Data"

##Category labels in column A (rows 2-5, leaving row 1 for a header)
ws.cells["A1"].value = "Quarter"
ws.cells["A2"].value = "Q1"
ws.cells["A3"].value = "Q2"
ws.cells["A4"].value = "Q3"
ws.cells["A5"].value = "Q4"

##Revenue series in column B
ws.cells["B1"].value = "Revenue"
ws.cells["B2"].value = 50000
ws.cells["B3"].value = 62000
ws.cells["B4"].value = 71000
ws.cells["B5"].value = 89000

##Expense series in column C
ws.cells["C1"].value = "Expenses"
ws.cells["C2"].value = 32000
ws.cells["C3"].value = 38000
ws.cells["C4"].value = 41000
ws.cells["C5"].value = 47000

ステップ 3: 列チャートを追加

ws.charts.add_bar(top_row, left_col, bottom_row, right_col) を使用して縦棒グラフを挿入します。このメソッドはチャートオブジェクトを直接返します:

##Insert a column chart occupying rows 7-22, columns 0-7
chart = ws.charts.add_bar(6, 0, 22, 7)

行と列のインデックスはゼロベースです。


ステップ 4: データ系列の設定

キーワード引数を使用して chart.n_series.add() で各データ系列を追加します:

##Add Revenue series
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")

##Add Expenses series
chart.n_series.add("C2:C5", category_data="A2:A5", name="Expenses")

category_data 引数は x 軸ラベルのセル範囲を指定します。name 引数は系列の凡例ラベルを設定します。


ステップ5: チャートタイトルとカテゴリデータを設定

チャートのタイトルをプレーン文字列として設定する:

chart.title = "Quarterly Sales vs Expenses"
chart.category_data = "A2:A5"   # x-axis labels at chart level
chart.show_legend = True
chart.legend_position = "bottom"

ステップ 6: ワークブックを保存

workbook.save("sales_chart.xlsx")
print("Workbook with chart saved.")

完全な縦棒グラフの例:

from aspose.cells_foss import Workbook, Cell

workbook = Workbook()
ws = workbook.worksheets[0]

##Data
labels = ["Q1", "Q2", "Q3", "Q4"]
revenue = [50000, 62000, 71000, 89000]
expenses = [32000, 38000, 41000, 47000]

ws.cells["A1"].value = "Quarter"
ws.cells["B1"].value = "Revenue"
ws.cells["C1"].value = "Expenses"

for i, (label, rev, exp) in enumerate(zip(labels, revenue, expenses), start=2):
    ws.cells[f"A{i}"].value = label
    ws.cells[f"B{i}"].value = rev
    ws.cells[f"C{i}"].value = exp

chart = ws.charts.add_bar(6, 0, 22, 7)
chart.title = "Quarterly Sales vs Expenses"
chart.category_data = "A2:A5"
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")
chart.n_series.add("C2:C5", category_data="A2:A5", name="Expenses")
chart.show_legend = True
chart.legend_position = "bottom"

workbook.save("quarterly_chart.xlsx")

ステップ 7: ラインチャートの作成

同じパターンは add_line() にも適用できます:

from aspose.cells_foss import Workbook, Cell

workbook = Workbook()
ws = workbook.worksheets[0]

months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
revenue = [42000, 47500, 53000, 49000, 61000, 68000]

ws.cells["A1"].value = "Month"
ws.cells["B1"].value = "Revenue"

for i, (m, r) in enumerate(zip(months, revenue), start=2):
    ws.cells[f"A{i}"].value = m
    ws.cells[f"B{i}"].value = r

chart = ws.charts.add_line(8, 0, 24, 8)
chart.title = "Monthly Revenue Trend"
chart.category_data = "A2:A7"
chart.n_series.add("B2:B7", category_data="A2:A7", name="Revenue")
chart.show_legend = True

workbook.save("trend_chart.xlsx")

一般的な問題と対処法

1. チャートが空白または何も表示されません

Cause: n_series.add() に渡されたデータ範囲に値が含まれていないか、セル範囲文字列が正しくありません。
Fix: セル範囲がデータと一致しているか確認してください。ws.cells["B2"].valueNone でないことを確認してください。

2. x 軸にカテゴリ ラベルが表示されない

Cause: chart.category_data が設定されていないか、範囲が空のセルを指しています。
Fix: 列 A にラベル文字列が含まれる場所で chart.category_data = "A2:A5" を設定してください。

3. チャート位置がデータと重なる

Cause: add_bar() の行境界がデータ領域と重なっています。
Fix: チャートをデータの下に配置します: ws.charts.add_bar(data_last_row + 2, 0, data_last_row + 18, 7)

4. AttributeError: 'ChartCollection' object has no attribute 'add'

原因: FOSS ライブラリはメソッド・パー・タイプ API を使用しており、add(ChartType.COLUMN, ...) ではありません。
対策: ws.charts.add_bar(...)ws.charts.add_line(...)ws.charts.add_pie(...)、または ws.charts.add_area(...) を使用してください。


よくある質問

どのチャートタイプがサポートされていますか?

最も一般的な型には add_bar()add_line()add_pie()add_area()、および add_stock() を使用してください。これら5つは完全な XML シリアル化サポートを備えています。利用可能な add_* メソッドの完全な一覧については、ChartCollection クラスを確認してください。

既存のExcelファイルにチャートを作成できますか?

はい。Workbook("existing.xlsx") を使用してブックをロードし、対象シートにアクセスし、適切な ws.charts.add_*() メソッドを使用してチャートを追加します。

チャートのタイトルはどう設定しますか?

プレーン文字列を割り当てます: chart.title = "My Chart Title".text のサブプロパティはありません: タイトルは文字列自体です。

このアプローチはpandasと互換性がありますか?

はい。pandas DataFrame の値をループでセルに書き込み、次にそのデータ範囲にチャートを追加します。


関連リソース:

 日本語