Tùy chỉnh trục biểu đồ trong bản trình bày bằng Python
Tổng quan
Bài viết này giải thích cách tùy chỉnh trục biểu đồ với Aspose.Slides cho Python thông qua .NET. Nó bao gồm các giá trị trục đã tính, chuyển đổi hàng và cột biểu đồ, hiển thị trục, khoảng cách nhãn danh mục và dấu tick, danh mục ngày và định dạng, xoay tiêu đề, vị trí trục và đơn vị hiển thị.
Lấy các giá trị tối đa trên trục dọc trong biểu đồ
Tạo một Presentation và thêm một biểu đồ khu vực với dữ liệu mặc định. Gọi validate_chart_layout trước khi đọc các giá trị trục đã tính để bố cục biểu đồ được cập nhật.
Đọc actual_max_value và actual_min_value để biết giới hạn trục, và actual_major_unit và actual_minor_unit để biết khoảng cách dấu tick. actual_major_unit_scale và actual_minor_unit_scale cung cấp các tỷ lệ đơn vị thời gian, liên quan đến trục ngày. Ví dụ lưu các giá trị này vào biến cục bộ và lưu biểu đồ.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.AREA, 100, 100, 500, 350)
chart.validate_chart_layout()
max_value = chart.axes.vertical_axis.actual_max_value
min_value = chart.axes.vertical_axis.actual_min_value
major_unit = chart.axes.vertical_axis.actual_major_unit
minor_unit = chart.axes.vertical_axis.actual_minor_unit
major_unit_scale = chart.axes.vertical_axis.actual_major_unit_scale
minor_unit_scale = chart.axes.vertical_axis.actual_minor_unit_scale
presentation.save("AxisValues_out.pptx", slides.export.SaveFormat.PPTX)
Hoán đổi dữ liệu giữa các trục
Sử dụng switch_row_column để đổi vai trò giữa series và category trong dữ liệu biểu đồ. Mỗi category cũ trở thành một series, và mỗi series cũ trở thành một category. Điều này thay đổi cách dữ liệu được nhóm; nó không hoán đổi trục ngang và trục dọc. Ví dụ sử dụng set_range để gán dữ liệu mặc định vào Sheet1!A1:D5, bao gồm hàng tiêu đề và cột category, trước khi hoán đổi hàng và cột. Nó lưu một biểu đồ với bốn series và ba category.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 100, 100, 400, 300)
chart.chart_data.set_range("Sheet1!A1:D5")
chart.chart_data.switch_row_column()
presentation.save("SwitchChartRowColumns_out.pptx", slides.export.SaveFormat.PPTX)
Vô hiệu hoá trục dọc cho biểu đồ đường
Đặt is_visible thành False trên trục dọc để ẩn nó. Ví dụ tạo một biểu đồ đường với dữ liệu mặc định và lưu lại với trục dọc bị ẩn.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.LINE, 100, 100, 400, 300)
chart.axes.vertical_axis.is_visible = False
presentation.save("HiddenVerticalAxis.pptx", slides.export.SaveFormat.PPTX)
Vô hiệu hoá trục ngang cho biểu đồ đường
Đặt is_visible thành False trên trục ngang để ẩn nó. Ví dụ tạo một biểu đồ đường với dữ liệu mặc định và lưu lại với trục ngang bị ẩn.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.LINE, 100, 100, 400, 300)
chart.axes.horizontal_axis.is_visible = False
presentation.save("HiddenHorizontalAxis.pptx", slides.export.SaveFormat.PPTX)
Thay đổi trục danh mục
Đặt category_axis_type để chọn trục danh mục ngày hoặc văn bản. Ví dụ này yêu cầu ExistingChart.pptx, với một biểu đồ là hình dạng đầu tiên trên slide đầu và các ô danh mục chứa giá trị ngày Excel dạng số. Nó thay đổi trục ngang thành trục ngày. Đặt is_automatic_major_unit thành False, major_unit thành 1, và major_unit_scale thành months để đặt các dấu tick chính ở khoảng một tháng.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation("ExistingChart.pptx") as presentation:
slide = presentation.slides[0]
chart = slide.shapes[0]
chart.axes.horizontal_axis.category_axis_type = charts.CategoryAxisType.DATE
chart.axes.horizontal_axis.is_automatic_major_unit = False
chart.axes.horizontal_axis.major_unit = 1
chart.axes.horizontal_axis.major_unit_scale = charts.TimeUnitType.MONTHS
presentation.save("ChangeChartCategoryAxis_out.pptx", slides.export.SaveFormat.PPTX)
Kiểm soát khoảng cách nhãn trục danh mục
Khi một biểu đồ có nhiều category, giảm số lượng nhãn trục hiển thị mà không xóa category hoặc điểm dữ liệu. Đặt is_automatic_tick_label_spacing thành False, sau đó đặt tick_label_spacing thành khoảng cách category mong muốn. Đối với category văn bản theo thứ tự bình thường, việc đếm bắt đầu từ category đầu tiên:
| Khoảng cách | Nhãn hiển thị trong ví dụ |
|---|---|
1 |
Danh mục 1, Danh mục 2, Danh mục 3, … Danh mục 24 |
2 |
Danh mục 1, Danh mục 3, Danh mục 5, … Danh mục 23 |
3 |
Danh mục 1, Danh mục 4, Danh mục 7, … Danh mục 22 |
Một khoảng cách của 3 hiển thị mỗi nhãn thứ ba, để lại hai nhãn bị ẩn giữa các nhãn hiển thị. Nó không xóa các cột tương ứng. Khoảng cách tự động chọn một mức dựa trên không gian khả dụng; nó không nhất thiết hiển thị mọi nhãn.
Dấu tick có các điều khiển riêng. Đặt is_automatic_tick_marks_spacing thành False và sử dụng tick_marks_spacing để đặt khoảng cách của chúng. Ví dụ, 1 giữ một dấu tick ở mỗi khoảng category trong khi nhãn chỉ xuất hiện mỗi category thứ ba. Đặt major_tick_mark thành một kiểu hiển thị để bạn có thể thấy kết quả. Đặt lại bất kỳ thuộc tính tự động‑spacing nào về True sẽ để biểu đồ tự chọn khoảng cách lại một lần nữa.
Ví dụ tự chứa sau đây tạo 24 category và một series, sau đó lưu ba slide trong CategoryAxisIntervals.pptx: khoảng cách tự động, khoảng cách nhãn thủ công với các dấu tick độc lập, và khôi phục khoảng cách tự động. Hai bản sao giữ nguyên dữ liệu biểu đồ gốc. Không cần bản trình chiếu đầu vào. Văn bản nhãn ngang làm cho sự khác biệt về mật độ dễ quan sát.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 30, 40, 660, 320)
chart.has_legend = False
chart.chart_data.categories.clear()
chart.chart_data.series.clear()
workbook = chart.chart_data.chart_data_workbook
workbook.clear(0)
series = chart.chart_data.series.add(charts.ChartType.CLUSTERED_COLUMN)
for i in range(24):
category_cell = workbook.get_cell(0, i + 1, 0, f"Category {i + 1}")
chart.chart_data.categories.add(category_cell)
value_cell = workbook.get_cell(0, i + 1, 1, 10 + i % 6 * 5)
series.data_points.add_data_point_for_bar_series(value_cell)
axis = chart.axes.horizontal_axis
axis.category_axis_type = charts.CategoryAxisType.TEXT
axis.text_format.text_block_format.rotation_angle = 0
axis.text_format.portion_format.font_height = 12
axis.major_tick_mark = charts.TickMarkType.OUTSIDE
axis.is_automatic_tick_label_spacing = True
axis.is_automatic_tick_marks_spacing = True
# Slide 2: hiển thị mỗi nhãn thứ ba, nhưng giữ một dấu tick cho mỗi danh mục.
manual_slide = presentation.slides.add_clone(slide)
manual_chart = manual_slide.shapes[0]
manual_axis = manual_chart.axes.horizontal_axis
manual_axis.is_automatic_tick_label_spacing = False
manual_axis.tick_label_spacing = 3
manual_axis.is_automatic_tick_marks_spacing = False
manual_axis.tick_marks_spacing = 1
# Slide 3: để biểu đồ tự chọn lại cả hai khoảng cách.
restored_slide = presentation.slides.add_clone(manual_slide)
restored_chart = restored_slide.shapes[0]
restored_chart.axes.horizontal_axis.is_automatic_tick_label_spacing = True
restored_chart.axes.horizontal_axis.is_automatic_tick_marks_spacing = True
presentation.save("CategoryAxisIntervals.pptx", slides.export.SaveFormat.PPTX)
Khoảng cách tự động (slide 1): Trong việc render này, mỗi nhãn category thứ hai được hiển thị và xuống hai dòng. Kết quả tự động có thể thay đổi tùy theo kích thước biểu đồ, phông chữ và bộ render.

Khoảng cách thủ công (slide 2): Mỗi nhãn thứ ba được hiển thị trên một dòng, trong khi các dấu tick vẫn ở mỗi khoảng category. Tất cả 24 cột, bao gồm cả các cột không có nhãn, vẫn hiển thị với cùng các giá trị. Slide 3 khôi phục lại giao diện tự động được trình bày ở trên.

Chọn trục và khoảng cách đúng
Sử dụng khoảng cách đếm category này cho trục danh mục văn bản, chẳng hạn trục danh mục của biểu đồ cột, đường, khu vực hoặc thanh. Trong biểu đồ cột, nó là trục ngang. Trong biểu đồ thanh ngang, trục danh mục là trục dọc, vì vậy áp dụng các thiết lập này cho vertical_axis. Khoảng cách dấu tick cũng áp dụng cho trục series trong các biểu đồ có trục series.
Không sử dụng khoảng cách nhãn category để đặt thang số của trục giá trị. Trên trục giá trị, major_unit chỉ ra sự chênh lệch giữa các giá trị: ví dụ, một major unit là 10 tạo ra các dấu tick ở 0, 10, 20, … khi trục bắt đầu từ zero. Một khoảng cách nhãn category là 3 thay vào đó đếm vị trí category, bất kể giá trị dữ liệu của chúng. Các biểu đồ scatter và bubble sử dụng trục giá trị thay vì trục danh mục văn bản. Đối với trục ngày, sử dụng các unit và scale dựa trên thời gian như mô tả trong Thay đổi trục danh mục.
Đặt định dạng ngày cho giá trị trục danh mục
Ví dụ này thay thế dữ liệu biểu đồ mặc định bằng bốn giá trị hàng năm. Các ngày được lưu dưới dạng số serial OLE Automation trong bảng tính đầu tiên (chỉ mục 0). Đặt category_axis_type thành trục ngày, tắt is_number_format_linked_to_source, và gán yyyy cho number_format để nhãn category hiển thị năm bốn chữ số độc lập với định dạng ô.
from datetime import date
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.LINE, 50, 50, 450, 300)
chart.chart_data.categories.clear()
chart.chart_data.series.clear()
workbook = chart.chart_data.chart_data_workbook
workbook.clear(0)
series = chart.chart_data.series.add(charts.ChartType.LINE)
for i in range(4):
category_date = date(2015 + i, 1, 1)
serial_date = (category_date - date(1899, 12, 30)).days
category_cell = workbook.get_cell(0, i + 1, 0, serial_date)
chart.chart_data.categories.add(category_cell)
value_cell = workbook.get_cell(0, i + 1, 1, i + 1)
series.data_points.add_data_point_for_line_series(value_cell)
chart.axes.horizontal_axis.category_axis_type = charts.CategoryAxisType.DATE
chart.axes.horizontal_axis.is_number_format_linked_to_source = False
chart.axes.horizontal_axis.number_format = "yyyy"
presentation.save("DateAxisFormat.pptx", slides.export.SaveFormat.PPTX)
Đặt góc xoay cho tiêu đề trục biểu đồ
Bật has_title trên trục dọc, cung cấp văn bản tiêu đề, và đặt rotation_angle để xoay tiêu đề. Góc được đo bằng độ; ví dụ này lưu một biểu đồ cột với tiêu đề trục giá trị được xoay 90 độ.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 50, 50, 450, 300)
chart.axes.vertical_axis.has_title = True
chart.axes.vertical_axis.title.add_text_frame_for_overriding("Value")
chart.axes.vertical_axis.title.text_format.text_block_format.rotation_angle = 90
presentation.save("RotatedAxisTitle.pptx", slides.export.SaveFormat.PPTX)
Đặt vị trí trục trên trục danh mục hoặc giá trị
Sử dụng axis_between_categories để kiểm soát việc trục giá trị cắt qua trục danh mục giữa các category hoặc tại các dấu tick của category. Thuộc tính này áp dụng cho trục danh mục. Ví dụ đặt nó thành True trên trục danh mục ngang của một biểu đồ cột và lưu kết quả.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 50, 50, 450, 300)
chart.axes.horizontal_axis.axis_between_categories = True
presentation.save("AxisBetweenCategories.pptx", slides.export.SaveFormat.PPTX)
Đặt đơn vị hiển thị trên trục giá trị của biểu đồ
Đặt display_unit để thay đổi thang nhãn trên trục giá trị mà không thay đổi dữ liệu gốc. Với DisplayUnitType được đặt thành MILLIONS, giá trị 60,000,000 sẽ hiển thị là 60. Ví dụ tạo một biểu đồ cột và áp dụng đơn vị hiển thị triệu cho trục dọc của nó.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 50, 50, 450, 300)
chart.axes.vertical_axis.display_unit = charts.DisplayUnitType.MILLIONS
presentation.save("Result.pptx", slides.export.SaveFormat.PPTX)
Câu hỏi thường gặp
Làm thế nào để đặt giá trị mà một trục cắt qua trục kia (giao cắt trục)?
Sử dụng cross_type để chọn hành vi giao cắt. Để chỉ định một giá trị giao cắt số, đặt cross_at. Các thiết lập này cho phép bạn di chuyển giao cắt trục tới một đường cơ sở phù hợp.
Làm sao tôi có thể định vị các nhãn tick so với trục?
Đặt tick_label_position bằng cách sử dụng TickLabelPositionType: LOW, HIGH, NEXT_TO, hoặc NONE. Để kiểm soát các dấu tick bản thân chúng, sử dụng major_tick_mark hoặc minor_tick_mark; chúng độc lập với vị trí nhãn.