Arbeta med diagram
Översikt
Aspose.Cells FOSS uses a method-per-chart-type API. Instead of a generic add(ChartType.X, ...) anrop, har varje diagramtyp sin egen dedikerade metod på arbetsbladets charts samling:
| Metod | Diagramtyp |
|---|---|
ws.charts.add_bar(top_row, left_col, bottom_row, right_col) | Grupperad kolumn (stapeldiagram) |
ws.charts.add_line(top_row, left_col, bottom_row, right_col) | Linje |
ws.charts.add_pie(top_row, left_col, bottom_row, right_col) | Cirkeldiagram |
ws.charts.add_area(top_row, left_col, bottom_row, right_col) | Ytdiagram |
Alla fyra positionsparametrar beskriver det rektangulära området i bladet där diagrammet kommer att bäddas in. Rad- och kolumnindex är nollbaserade. Varje metod returnerar en Chart objekt som du konfigurerar vidare innan du sparar.
Begränsning: Endast diagramtyperna LINE, BAR, PIE, AREA och STOCK kan sparas till XLSX. Anropar wb.save() med en arbetsbok som innehåller någon annan diagramtyp (t.ex. SCATTER, WATERFALL, RADAR, TREEMAP, HISTOGRAM) kommer att utlösa NotImplementedError.
Lägga till ett stapeldiagram
Exemplet nedan skriver ett litet intäkts‑per‑produkt‑dataset och lägger sedan till ett stapeldiagram placerat under datan.
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")Data täcker raderna 1–6 (nollbaserade rader 0–5), så top_row=6 placerar the diagrammet omedelbart nedanför utan att överlappa data.
Lägga till ett linjediagram
Linjediagram fungerar bra för att visa trender över tid. Funktionssignaturen är identisk med add_bar — endast metodnamnet ändras.
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")Diagramtitel och legend
Ställ in diagramtitel genom att tilldela en vanlig sträng direkt till chart.title. Egenskapen egenskapen accepterar en str — försök inte att komma åt en underegenskap som .title.text, vilket inte finns i detta bibliotek.
##Correct
chart.title = "Quarterly Sales"
##Wrong — raises AttributeError
##chart.title.text = "Quarterly Sales"Legendsynlighet och position styrs av två egenskaper:
chart.show_legend = True # display the legend
chart.legend_position = "bottom" # "bottom", "top", "left", "right"För att dölja legenden helt, sätt chart.show_legend = False. Värdet legend_position ignoreras när legenden är dold.
Konfiguration av dataserier
Använd chart.n_series.add() för att fästa dataintervall till ett diagram. Skicka alla argument som nyckelordsargument för att undvika förvirring kring positionsordning:
chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")Du kan lägga till flera serier i ett enda diagram genom att anropa n_series.add mer mer än en gång. Varje anrop lägger till en ny serie:
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")Kategoridata
Kategorietiketter kan ställas in på diagramnivå eller på individuell serienivå.
Kategoridata på diagramnivå gäller för alla serier som standard:
chart.category_data = "A2:A5"Kategoridata på serienivå (via category_data nyckelordsargument till n_series.add) åsidosätter diagramnivåinställningen för den specifika serien:
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")När varje serie delar samma kategorintervall, ange chart.category_data en gång är mer koncist. När serier har olika kategorintervall — till exempel, två dataset med olika tidsperioder — använd per-serie nyckelordsargumentet istället.
Diagramplacering
De fyra positionsparametrarna till varje add_* metod definierar en avgränsande rektangel i arket, mätt i nollbaserade rad- och kolumnindex:
add_bar(top_row, left_col, bottom_row, right_col)| Parameter | Betydelse |
|---|---|
top_row | Nollbaserat index för den första rad som diagrammet upptar |
left_col | Nollbaserat index för den vänstra kolumnen |
bottom_row | Nollbaserat index för den sista raden som diagrammet upptar |
right_col | Nollbaserat index för den högra kolumnen |
Ett vanligt mönster är att placera diagrammet direkt under data. Om dina data slutar på Excel-rad 6 (nollbaserat radindex 5), starta diagrammet vid 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")Gör diagrammet tillräckligt högt för att vara läsbart: en höjd på minst 15 rader (bottom_row - top_row >= 15) och en bredd på minst 6 kolumner är en rimlig utgångspunkt.
Vanliga misstag
| Fel | Rätt | Varför |
|---|---|---|
ws.charts.add(ChartType.COLUMN, ...) | ws.charts.add_bar(...) | Anropa inte ws.charts.add(ChartType.X, ...) direkt för ej stödda typer — det kommer att kasta ett fel NotImplementedError för 11 av 16 diagramtyper. Använd add_bar(), add_line(), add_pie(), add_area(), eller add_stock() istället. |
chart.title.text = "My Chart" | chart.title = "My Chart" | chart.title är en enkel strängegenskap, inte ett objekt med en .text underegenskap. |
chart.n_series.add("B2:B5", "A2:A5", "Revenue") | chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue") | De andra och tredje parametrarna måste skickas som nyckelordsargument för att undvika tvetydighet. |
chart = ws.charts.add_bar(0, 0, 15, 7) (överlappande data) | Placera top_row under sista dataraden | Ett diagram som överlappar data döljer värden och orsakar förvirrande layouter. |
chart.legend_position = "bottom" utan chart.show_legend = True | Sätt chart.show_legend = True först | legend_position har ingen effekt när show_legend är False. |
Se även
- API-referens: Fullständig klass- och metoddokumentation för
aspose.cells_foss - Kunskapsbas: Uppgiftsorienterade instruktionsguider
- Produktöversikt: Sammanfattning av funktioner och möjligheter
- Komma igång / Installation: pip install och konfiguration
- Blogg: Python Excel-diagramhandledning: Steg-för-steg guide för diagramskapande