PythonでExcelのチャートを作成する方法
チャートは、生のスプレッドシートデータを視覚的な洞察に変換します。Aspose.Cells FOSS for Python を使用すると、Microsoft Excel を必要とせずに、データ系列、カテゴリラベル、チャートタイトル、位置を完全に制御しながら、列、折れ線、棒、円グラフをプログラムで作成できます。
Aspose.Cells FOSSでチャートを作成する理由は?
- Excelは不要: 任意のOSでPythonだけでチャートを作成します。
- タイプ別メソッドAPI:
add_bar()、add_line()、add_pie()、add_area()、その他を使用し、チャートタイプごとに1つのメソッドです。 - 名前付きシリーズ: 各シリーズを
name=、category_data=キーワード引数で設定します。 - 正確な配置: セル座標 (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"].value が None でないことを確認してください。
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 の値をループでセルに書き込み、次にそのデータ範囲にチャートを追加します。
関連リソース: