チャートの操作
概要
Aspose.Cells FOSS は、チャートタイプごとのメソッド API を使用します。汎用的なadd(ChartType.X, ...) 呼び出しの代わりに、各チャートタイプはワークシートの charts コレクション上に専用のメソッドを持ちます:
| メソッド | チャートタイプ |
|---|---|
ws.charts.add_bar(top_row, left_col, bottom_row, right_col) | クラスター化された縦棒(棒グラフ) |
ws.charts.add_line(top_row, left_col, bottom_row, right_col) | 折れ線 |
ws.charts.add_pie(top_row, left_col, bottom_row, right_col) | 円グラフ |
ws.charts.add_area(top_row, left_col, bottom_row, right_col) | エリア |
すべての4つの位置パラメータは、チャートが埋め込まれるシート上の矩形領域を記述します。行と列のインデックスは ゼロベース です。各メソッドは、保存する前にさらに構成できる Chart オブジェクトを返します。
制限: LINE、BAR、PIE、AREA、そして STOCK のチャートタイプのみが XLSX に保存できます。
wb.save()を、他のチャートタイプ(例: SCATTER、WATERFALL、RADAR、TREEMAP、HISTOGRAM)を含むワークブックで呼び出すと、NotImplementedErrorが発生します。
列チャートの追加
以下の例では、製品別の小規模な売上データセットを書き込み、データの下に配置された縦棒グラフを追加します。
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##--- Data ---
ws.cells["A1"].value = "Product"
ws.cells["B1"].value = "Revenue"
products = ["Widget A", "Widget B", "Widget C", "Widget D", "Widget E"]
revenues = [12_500, 18_200, 9_800, 21_400, 15_600]
for i, (product, revenue) in enumerate(zip(products, revenues), start=2):
ws.cells[f"A{i}"].value = product
ws.cells[f"B{i}"].value = revenue
##--- Chart (rows 7–22, columns A–H, all zero-based) ---
##top_row=6, left_col=0, bottom_row=22, right_col=7
chart = ws.charts.add_bar(6, 0, 22, 7)
chart.title = "Revenue by Product"
chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue (USD)")
chart.show_legend = True
chart.legend_position = "bottom"
workbook.save("column_chart.xlsx")
print("Saved column_chart.xlsx")データは行1–6(ゼロベースの行0–5)を占めるため、top_row=6 はデータと重ならずにすぐ下にチャートを配置します。
ラインチャートの追加
折れ線グラフは、時間の経過に伴うトレンドを示すのに適しています。
呼び出しシグネチャはadd_bar と同一です — メソッド名だけが変わります。
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##--- Monthly trend data ---
ws.cells["A1"].value = "Month"
ws.cells["B1"].value = "Page Views"
ws.cells["C1"].value = "Conversions"
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
page_views = [4_200, 5_100, 4_800, 6_300, 7_100, 6_800]
conversions = [ 210, 255, 230, 340, 390, 360]
for i, (month, pv, cv) in enumerate(zip(months, page_views, conversions), start=2):
ws.cells[f"A{i}"].value = month
ws.cells[f"B{i}"].value = pv
ws.cells[f"C{i}"].value = cv
##--- Line chart below the data ---
chart = ws.charts.add_line(8, 0, 24, 8)
chart.title = "Monthly Website Metrics"
chart.n_series.add("B2:B7", category_data="A2:A7", name="Page Views")
chart.n_series.add("C2:C7", category_data="A2:A7", name="Conversions")
chart.show_legend = True
chart.legend_position = "bottom"
workbook.save("line_chart.xlsx")
print("Saved line_chart.xlsx")チャート タイトルと凡例
chart.title に直接プレーン文字列を割り当ててチャートタイトルを設定します。
プロパティは str を受け入れます — このライブラリには存在しない .title.text のようなサブプロパティにアクセスしようとしないでください。
##Correct
chart.title = "Quarterly Sales"
##Wrong — raises AttributeError
##chart.title.text = "Quarterly Sales"凡例の表示と位置は、2つのプロパティで制御されます。
chart.show_legend = True # display the legend
chart.legend_position = "bottom" # "bottom", "top", "left", "right"凡例を完全に非表示にするには、chart.show_legend = False を設定します。凡例が非表示の場合、legend_position の値は無視されます。
データシリーズ構成
chart.n_series.add() を使用してデータ範囲をチャートに添付します。すべての
引数を キーワード引数 として渡すことで、位置順の混乱を防ぎます:
chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")単一のチャートに複数の系列を追加するには、n_series.add を複数回呼び出します。呼び出すたびに新しい系列が追加されます:
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##Headers
ws.cells["A1"].value = "Quarter"
ws.cells["B1"].value = "North"
ws.cells["C1"].value = "South"
ws.cells["D1"].value = "East"
data = [
("Q1", 8_400, 6_100, 7_200),
("Q2", 9_200, 7_400, 8_100),
("Q3", 10_500, 8_900, 9_600),
("Q4", 11_800, 9_300, 10_200),
]
for i, row in enumerate(data, start=2):
ws.cells[f"A{i}"].value = row[0]
ws.cells[f"B{i}"].value = row[1]
ws.cells[f"C{i}"].value = row[2]
ws.cells[f"D{i}"].value = row[3]
chart = ws.charts.add_bar(6, 0, 22, 8)
chart.title = "Regional Sales by Quarter"
chart.n_series.add("B2:B5", category_data="A2:A5", name="North")
chart.n_series.add("C2:C5", category_data="A2:A5", name="South")
chart.n_series.add("D2:D5", category_data="A2:A5", name="East")
chart.show_legend = True
chart.legend_position = "bottom"
workbook.save("multi_series_chart.xlsx")
print("Saved multi_series_chart.xlsx")カテゴリ データ
カテゴリ ラベルは、チャート レベルまたは個々のシリーズ レベルで設定できます。
Chart-level category data はデフォルトで全ての系列に適用されます:
chart.category_data = "A2:A5"シリーズレベルのカテゴリ データ(category_data キーワード引数を介してn_series.add に)は、その特定のシリーズに対するチャートレベルの設定を上書きします:
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")すべてのシリーズが同じカテゴリ範囲を共有している場合、chart.category_data
を一度設定するだけで簡潔です。シリーズが異なるカテゴリ範囲を持つ場合 — 例えば、
期間が異なる2つのデータセット — 代わりに per-series keyword argument を使用してください。
チャート配置
すべてのadd_*メソッドに対する4つの位置パラメータは、シート内の境界矩形を定義し、行と列のインデックスはゼロベースで測定されます:
add_bar(top_row, left_col, bottom_row, right_col)| Parameter | Meaning |
|---|---|
top_row | チャートが占める最初の行のゼロベースインデックス |
left_col | 最左列のゼロベースインデックス |
bottom_row | チャートが占める最後の行のゼロベースインデックス |
right_col | 最右列のゼロベースインデックス |
一般的なパターンは、チャートをデータのすぐ下に配置することです。データが Excel の行 6(ゼロベースの行インデックス 5)で終了する場合、チャートは top_row=6 から開始します:
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##Data in rows 1–5 (zero-based 0–4)
labels = ["Alpha", "Beta", "Gamma", "Delta", "Epsilon"]
values = [30, 45, 28, 60, 52]
ws.cells["A1"].value = "Category"
ws.cells["B1"].value = "Score"
for i, (label, val) in enumerate(zip(labels, values), start=2):
ws.cells[f"A{i}"].value = label
ws.cells[f"B{i}"].value = val
##Data ends at zero-based row 5 (Excel row 6).
##Place chart from row 6 to row 22, columns A–H (0–7).
chart = ws.charts.add_bar(6, 0, 22, 7)
chart.title = "Category Scores"
chart.n_series.add("B2:B6", category_data="A2:A6", name="Score")
chart.show_legend = False
workbook.save("positioned_chart.xlsx")
print("Saved positioned_chart.xlsx")チャートが読みやすいように十分な高さにしてください:少なくとも 15 行の高さ
(bottom_row - top_row >= 15) かつ 幅は少なくとも 6 列が妥当な
出発点です。
よくある間違い
| 間違い | 正しい | 理由 |
|---|---|---|
ws.charts.add(ChartType.COLUMN, ...) | ws.charts.add_bar(...) | サポートされていないタイプに対して ws.charts.add(ChartType.X, ...) を直接呼び出さないでください — 16 種類のチャートのうち 11 種類で NotImplementedError が発生します。代わりに add_bar()、add_line()、add_pie()、add_area()、または add_stock() を使用してください。 |
chart.title.text = "My Chart" | chart.title = "My Chart" | chart.title は単なる文字列プロパティであり、.text のサブプロパティを持つオブジェクトではありません。 |
chart.n_series.add("B2:B5", "A2:A5", "Revenue") | chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue") | 曖昧さを防ぐため、2 番目と 3 番目のパラメータはキーワード引数として渡す必要があります。 |
chart = ws.charts.add_bar(0, 0, 15, 7) (overlaps data) | Place top_row below last data row | データと重なるチャートは値を隠し、レイアウトが混乱します。 |
chart.legend_position = "bottom" without chart.show_legend = True | Set chart.show_legend = True first | show_legend が False の場合、legend_position は効果がありません。 |
参照
- API Reference:
aspose.cells_fossの完全なクラスおよびメソッドのドキュメント - Knowledge Base: タスク指向のハウツーガイド
- Product Overview: 機能と能力の概要
- Getting Started / Installation: pip インストールとセットアップ
- Blog: Python Excel Chart Tutorial: ステップバイステップのチャート作成ガイド