Εργασία με Διαγράμματα
Επισκόπηση
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) | Περιοχή |
Οι τέσσερις παραμετρικές θέσεις περιγράφουν την ορθογώνια περιοχή στο φύλλο όπου θα ενσωματωθεί το διάγραμμα. Οι δείκτες γραμμής και στήλης είναι μηδενικής βάσης. Κάθε μέθοδος επιστρέφει ένα αντικείμενο 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"Η ορατότητα και η θέση του υπομνήματος ελέγχονται από δύο ιδιότητες:
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() για να συνδέσετε περιοχές δεδομένων σε ένα γράφημα. Περνάτε όλα
τα επιχειρήματα ως keyword arguments για να αποφύγετε τη σύγχυση της σειράς θέσεων:
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.category_data = "A2:A5"Δεδομένα κατηγορίας σε επίπεδο σειράς (μέσω του ορίσματος λέξης-κλειδί category_data στοn_series.add) παρακάμπτει τη ρύθμιση σε επίπεδο γραφήματος για αυτήν τη συγκεκριμένη σειρά:
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")Όταν κάθε σειρά μοιράζεται το ίδιο εύρος κατηγορίας, ο ορισμός chart.category_data μία φορά είναι πιο συνοπτικός. Όταν οι σειρές έχουν διαφορετικά εύρη κατηγορίας — για παράδειγμα, δύο σύνολα δεδομένων με διαφορετικές χρονικές περιόδους — χρησιμοποιήστε το όρισμα-λέξη-κλειδί ανά σειρά αντί αυτού.
Τοποθέτηση γραφήματος
Οι τέσσερις παραμετρικές θέσεις σε κάθε μέθοδο add_* ορίζουν ένα περιοριστικό ορθογώνιο στο φύλλο, μετρημένο σε δείκτες γραμμής και στήλης που ξεκινούν από το μηδέν:
add_bar(top_row, left_col, bottom_row, right_col)| Parameter | Meaning |
|---|---|
top_row | Δείκτης μηδενικής βάσης της πρώτης γραμμής που καταλαμβάνεται από το γράφημα |
left_col | Δείκτης μηδενικής βάσης της πιο αριστερής στήλης |
bottom_row | Δείκτης μηδενικής βάσης της τελευταίας γραμμής που καταλαμβάνεται από το γράφημα |
right_col | Δείκτης μηδενικής βάσης της πιο δεξιάς στήλης |
Ένα κοινό μοτίβο είναι να τοποθετείτε το γράφημα απευθείας κάτω από τα δεδομένα. Εάν τα δεδομένα σας
τελειώνουν στη σειρά 6 του Excel (δείκτης σειράς μηδενικής βάσης 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 στηλών είναι ένα λογικό
αρχικό σημείο.
Συνηθισμένα Λάθη
| Wrong | Right | Why |
|---|---|---|
ws.charts.add(ChartType.COLUMN, ...) | ws.charts.add_bar(...) | Μην καλέσετε το ws.charts.add(ChartType.X, ...) απευθείας για μη υποστηριζόμενους τύπους — θα προκαλέσει NotImplementedError για 11 από 16 τύπους διαγραμμάτων. Χρησιμοποιήστε το 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") | Οι δεύτερη και τρίτη παράμετροι πρέπει να περάσουν ως ορίσματα‑κλειδιά για να αποφευχθεί η ασάφεια. |
chart = ws.charts.add_bar(0, 0, 15, 7) (overlaps data) | Place top_row below last data row | Τοποθετήστε το top_row κάτω από την τελευταία γραμμή δεδομένων. Ένα διάγραμμα που επικαλύπτει τα δεδομένα κρύβει τις τιμές και προκαλεί συγκεχυμένες διατάξεις. |
chart.legend_position = "bottom" χωρίς chart.show_legend = True | Ορίστε το chart.show_legend = True πρώτα | legend_position δεν έχει αποτέλεσμα όταν το show_legend είναι False. |
Δείτε επίσης
- API Reference: Πλήρης τεκμηρίωση κλάσεων και μεθόδων για
aspose.cells_foss - Knowledge Base: Οδηγοί προσανατολισμένοι σε εργασίες
- Product Overview: Περίληψη χαρακτηριστικών και δυνατοτήτων
- Getting Started / Installation: pip install και ρύθμιση
- Blog: Python Excel Chart Tutorial: Οδηγός δημιουργίας γραφήματος βήμα-βήμα