Εργασία με Διαγράμματα

Επισκόπηση

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)
ParameterMeaning
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 στηλών είναι ένα λογικό
αρχικό σημείο.


Συνηθισμένα Λάθη

WrongRightWhy
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.

Δείτε επίσης

 Ελληνικά