Εργασία με Διαγράμματα
Επισκόπηση
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) | Περιοχή |
Οι τέσσερις παραμετρικές θέσεις περιγράφουν το ορθογώνιο χώρο στο φύλλο όπου το διάγραμμα θα ενσωματωθεί. Οι δείκτες γραμμής και στήλης είναι μηδενικής βάσης. Κάθε μέθοδος επιστρέφει ένα 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() για να συνδέσετε περιοχές δεδομένων σε ένα διάγραμμα. Περνάτε όλα τα ορίσματα ως ορίσματα-κλειδιά για να αποφευχθεί η σύγχυση της θέσης-σειράς:
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)| Παράμετρος | Σημασία |
|---|---|
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 στηλών αποτελεί λογικό σημείο εκκίνησης.
Συνηθισμένα Λάθη
| Λάθος | Σωστό | Γιατί |
|---|---|---|
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) (επικαλύπτει δεδομένα) | Τοποθετήστε top_row κάτω από την τελευταία γραμμή δεδομένων | Ένα γράφημα που επικαλύπτει δεδομένα κρύβει τις τιμές και προκαλεί συγκεχυμένες διατάξεις. |
chart.legend_position = "bottom" χωρίς chart.show_legend = True | Ορίστε chart.show_legend = True πρώτο | legend_position δεν έχει καμία επίδραση όταν show_legend είναι False. |
Δείτε επίσης
- Αναφορά API: Πλήρη τεκμηρίωση κλάσεων και μεθόδων για
aspose.cells_foss - Βάση Γνώσεων: Οδηγοί προσανατολισμένοι σε εργασίες
- Επισκόπηση Προϊόντος: Σύνοψη χαρακτηριστικών και δυνατοτήτων
- Ξεκινώντας / Εγκατάσταση: pip install και ρύθμιση
- Blog: Python Εκπαιδευτικό για Διάγραμμα Excel: Οδηγός δημιουργίας διαγράμματος βήμα-βήμα