from pptx import Presentation
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE, XL_LEGEND_POSITION
from pptx.util import Inches
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[5])
# Create chart data
chart_data = CategoryChartData()
chart_data.categories = ['Q1', 'Q2', 'Q3', 'Q4']
chart_data.add_series('Revenue', (125.3, 142.7, 156.2, 178.9))
chart_data.add_series('Costs', (95.2, 105.8, 112.3, 125.6))
chart_data.add_series('Profit', (30.1, 36.9, 43.9, 53.3))
# Add chart
x, y, cx, cy = Inches(0.5), Inches(1), Inches(9), Inches(5)
graphic_frame = slide.shapes.add_chart(
XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data
)
chart = graphic_frame.chart
# Add legend
chart.has_legend = True
chart.legend.position = XL_LEGEND_POSITION.BOTTOM
chart.legend.include_in_layout = False
# Format value axis
value_axis = chart.value_axis
value_axis.maximum_scale = 200
value_axis.has_major_gridlines = True
prs.save('revenue-chart.pptx')