チャートの操作

概要

Aspose.Cells FOSS uses a method-per-chart-type API. Instead of a generic 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 つの位置パラメータは、シート内でチャートが埋め込まれる矩形領域を記述します。 チャートが埋め込まれる場所です。行と列のインデックスは ゼロベース. 各 メソッドは a を返します Chart 保存する前にさらに構成できるオブジェクトです。.

制限: LINE、BAR、PIE、AREA、そして STOCK のチャートタイプのみが XLSX に保存できます。Calling 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 さらに 1回以上。各呼び出しは新しい系列を追加します:

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.category_data = "A2:A5"

系列レベルのカテゴリデータ (via the category_data キーワード引数 n_series.add)はその特定の系列に対するチャートレベルの設定を上書きします:

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

すべての系列が同じカテゴリ範囲を共有している場合、設定 chart.category_data 一度だけ設定すれば簡潔です。系列が異なるカテゴリ範囲を持つ場合 — 例えば、, 異なる期間を持つ2つのデータセット — 各系列のキーワード引数を使用してください 代わりに。.


チャートの配置

すべての対象に対する4つの位置パラメータ add_* メソッドは境界を定義する シート内の矩形で、0ベースの行と列のインデックスで測定されます:

add_bar(top_row, left_col, bottom_row, right_col)
パラメータ意味
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, ...) サポートされていない型に対して直接呼び出すと — エラーが発生します NotImplementedError 16種類のチャートのうち11種類に対して。使用してください 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) (データが重複)配置 top_row 最後のデータ行の下にデータが重なるチャートは値を隠し、レイアウトが混乱します。.
chart.legend_position = "bottom" なしで chart.show_legend = True設定 chart.show_legend = True 最初legend_position は…の場合、効果がありません show_legend です False.

関連項目

 日本語