チャートの操作

概要

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)
ParameterMeaning
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 = TrueSet chart.show_legend = True firstshow_legendFalse の場合、legend_position は効果がありません。

参照

 日本語