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

Επισκόπηση

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.

Δείτε επίσης

 Ελληνικά