def populate_fixture(self, workbook_, worksheet_): chart_data = BubbleChartData() series_1 = chart_data.add_series('Series 1') for pt in ((1, 1.1, 10), (2, 2.2, 20)): series_1.add_data_point(*pt) series_2 = chart_data.add_series('Series 2') for pt in ((3, 3.3, 30), (4, 4.4, 40)): series_2.add_data_point(*pt) workbook_writer = BubbleWorkbookWriter(chart_data) expected_calls = [ call.write_column(1, 0, [1, 2], ANY), call.write(0, 1, 'Series 1'), call.write_column(1, 1, [1.1, 2.2], ANY), call.write(0, 2, 'Size'), call.write_column(1, 2, [10, 20], ANY), call.write_column(5, 0, [3, 4], ANY), call.write(4, 1, 'Series 2'), call.write_column(5, 1, [3.3, 4.4], ANY), call.write(4, 2, 'Size'), call.write_column(5, 2, [30, 40], ANY), ] return workbook_writer, workbook_, worksheet_, expected_calls
def replace_bubble_data(shape: GraphicFrame, data: BubbleData): chart_data = BubbleChartData() for name, points in data.series.items(): series_data = chart_data.add_series(name) for point in points: series_data.add_data_point(point.x, point.y, point.size) shape.chart.replace_data(chart_data)
def when_I_replace_its_data_with_3_series_of_three_bubble_pts_each(context): chart_data = BubbleChartData() for idx in range(3): series_title = 'New Series %d' % (idx + 1) series = chart_data.add_series(series_title) for jdx in range(3): x, y, size = idx * 3 + jdx, idx * 2 + jdx, idx + jdx series.add_data_point(x, y, size) context.chart.replace_data(chart_data)
def when_I_replace_its_data_with_3_series_of_three_bubble_pts_each(context): chart_data = BubbleChartData() for idx in range(3): series_title = "New Series %d" % (idx + 1) series = chart_data.add_series(series_title) for jdx in range(3): x, y, size = idx * 3 + jdx, idx * 2 + jdx, idx + jdx series.add_data_point(x, y, size) context.chart.replace_data(chart_data)
def rewrite_fixture(self): ser_xml, expected_xml = snippet_seq("rewrite-ser")[4:6] chart_data = BubbleChartData() series_data = chart_data.add_series("Series 1") series_data.add_data_point(1, 2, 10) series_data.add_data_point(3, 4, 20) rewriter = _BubbleSeriesXmlRewriter(chart_data) ser = parse_xml(ser_xml) return rewriter, ser, series_data, expected_xml
def bubbleSize_fixture(self, request): cht_numfmt, ser_numfmt, expected_numfmt = request.param expected_xml = xml( 'c:bubbleSize/c:numRef/(c:f"Sheet1!$C$2:$C$1",c:numCache/(c:form' 'atCode"%s",c:ptCount{val=0}))' % expected_numfmt) chart_number_format = () if cht_numfmt is None else (cht_numfmt, ) series_number_format = () if ser_numfmt is None else (ser_numfmt, ) chart_data = BubbleChartData(*chart_number_format) series_data = chart_data.add_series(None, *series_number_format) xml_writer = _BubbleSeriesXmlWriter(series_data) return xml_writer, expected_xml
def rewrite_fixture(self): ser_xml, expected_xml = snippet_seq('rewrite-ser')[4:6] chart_data = BubbleChartData() series_data = chart_data.add_series('Series 1') series_data.add_data_point(1, 2, 10) series_data.add_data_point(3, 4, 20) rewriter = _BubbleSeriesXmlRewriter(chart_data) ser = parse_xml(ser_xml) return rewriter, ser, series_data, expected_xml
def bubbleSize_fixture(self, request): cht_numfmt, ser_numfmt, expected_numfmt = request.param expected_xml = xml( 'c:bubbleSize/c:numRef/(c:f"Sheet1!$C$2:$C$1",c:numCache/(c:form' 'atCode"%s",c:ptCount{val=0}))' % expected_numfmt ) chart_number_format = () if cht_numfmt is None else (cht_numfmt,) series_number_format = () if ser_numfmt is None else (ser_numfmt,) chart_data = BubbleChartData(*chart_number_format) series_data = chart_data.add_series(None, *series_number_format) xml_writer = _BubbleSeriesXmlWriter(series_data) return xml_writer, expected_xml
def plot_PriorityvsRisk_slide1(): slide = prs.slides.add_slide(prs.slide_layouts[3]) #Declare the chart chart_data = BubbleChartData() #annotate the points series_1 = chart_data.add_series(' Category of KRI ') series_1.add_data_point(7.0, 3.5, 2) series_1.add_data_point(15.0, 3.5, 2) series_1.add_data_point(5.0, 2.2, 2) series_1.add_data_point(10.0, 2.2, 2) series_1.add_data_point(15.0, 2.2, 2) x, y, cx, cy = Inches(2), Inches(2), Inches(6), Inches(4.5) chart = slide.shapes.add_chart(XL_CHART_TYPE.BUBBLE, x, y, cx, cy, chart_data).chart category_axis = chart.category_axis value_axis = chart.value_axis value_axis.axis_title.text_frame.text = 'Priority' category_axis.axis_title.text_frame.text = 'Risk' chart.has_legend = True value_axis.has_major_gridlines = False value_axis.major_tick_mark = XL_TICK_MARK.NONE plot = chart.plots[0] # print plot.has_data_labels # print plot.has_data_labels plot.has_data_labels = True # assert plot.data_labels.font.fill.fore_color.type == MSO_COLOR_TYPE.RGB # print plot.data_labels.font.color.rgb tick_labels = value_axis.tick_labels tick_labels.number_format = '0' tick_labels.font.bold = True tick_labels.font.size = Pt(1) tick_labels = category_axis.tick_labels tick_labels.number_format = '0' tick_labels.font.bold = True tick_labels.font.size = Pt(1) prs.save('chart-01.pptx') pass
def make_bubble_chart_data(ser_count, point_count): """ Return an |BubbleChartData| object populated with *ser_count* series, each having *point_count* data points. """ points = ( (1.1, 11.1, 10.0), (2.1, 12.1, 20.0), (3.1, 13.1, 30.0), (1.2, 11.2, 40.0), (2.2, 12.2, 50.0), (3.2, 13.2, 60.0), ) chart_data = BubbleChartData() for i in range(ser_count): series_label = 'Series %d' % (i+1) series = chart_data.add_series(series_label) for j in range(point_count): point_idx = (i * point_count) + j x, y, size = points[point_idx] series.add_data_point(x, y, size) return chart_data
def when_I_add_a_bubble_chart_having_2_series_of_3_pts(context, bubble_type): chart_type = getattr(XL_CHART_TYPE, bubble_type) data = ( ('Series 1', ((-0.1, 0.5, 1.0), (16.2, 0.0, 2.0), (8.0, -0.2, 3.0))), ('Series 2', ((12.4, 0.8, 4.0), (-7.5, 0.5, 5.0), (5.1, -0.5, 6.0))), ) chart_data = BubbleChartData() for series_data in data: series_label, points = series_data series = chart_data.add_series(series_label) for point in points: x, y, size = point series.add_data_point(x, y, size) context.chart = context.slide.shapes.add_chart(chart_type, Inches(1), Inches(1), Inches(8), Inches(5), chart_data).chart
def when_I_add_a_bubble_chart_having_2_series_of_3_pts(context, bubble_type): chart_type = getattr(XL_CHART_TYPE, bubble_type) data = ( ("Series 1", ((-0.1, 0.5, 1.0), (16.2, 0.0, 2.0), (8.0, -0.2, 3.0))), ("Series 2", ((12.4, 0.8, 4.0), (-7.5, 0.5, 5.0), (5.1, -0.5, 6.0))), ) chart_data = BubbleChartData() for series_data in data: series_label, points = series_data series = chart_data.add_series(series_label) for point in points: x, y, size = point series.add_data_point(x, y, size) context.chart = context.slide.shapes.add_chart( chart_type, Inches(1), Inches(1), Inches(8), Inches(5), chart_data ).chart
def make_bubble_chart_data(ser_count, point_count): """ Return an |BubbleChartData| object populated with *ser_count* series, each having *point_count* data points. """ points = ( (1.1, 11.1, 10.0), (2.1, 12.1, 20.0), (3.1, 13.1, 30.0), (1.2, 11.2, 40.0), (2.2, 12.2, 50.0), (3.2, 13.2, 60.0), ) chart_data = BubbleChartData() for i in range(ser_count): series_label = "Series %d" % (i + 1) series = chart_data.add_series(series_label) for j in range(point_count): point_idx = (i * point_count) + j x, y, size = points[point_idx] series.add_data_point(x, y, size) return chart_data
from pptx import Presentation from pptx.chart.data import XyChartData, BubbleChartData from pptx.enum.chart import XL_CHART_TYPE from pptx.util import Inches # create presentation with 1 slide ------ prs = Presentation() slide = prs.slides.add_slide(prs.slide_layouts[5]) # define chart data --------------------- chart_data = BubbleChartData() series_1 = chart_data.add_series('Series 1') series_1.add_data_point(0.7, 2.7, 10) series_1.add_data_point(1.8, 3.2, 4) series_1.add_data_point(2.6, 0.8, 8) # add chart to slide -------------------- x, y, cx, cy = Inches(2), Inches(2), Inches(6), Inches(4.5) chart = slide.shapes.add_chart(XL_CHART_TYPE.BUBBLE, x, y, cx, cy, chart_data).chart prs.save('BubbleChart.pptx')