2

I tried to find a gauge chart based on XlsxWriter but I haven't found anything on the web. I don't want to reinvent the wheel. Does someone have already build this chart or know where I can find a python script?

Gilles Criton
  • 673
  • 1
  • 13
  • 27
  • Do you mean a combined Pie/Doughnut chart like this?: https://www.excel-easy.com/examples/gauge-chart.html – jmcnamara May 05 '19 at 17:45
  • Yes I do. I am bit surprised that I haven't found someone on the web who developed a nice function for this chart. I mean using xlsxwriter – Gilles Criton May 06 '19 at 11:01

1 Answers1

1

Here is an example of how to create a gauge chart by combining a doughnut chart and and pie chart based on this tutorial.

Note, this requires XlsxWriter >= 1.0.8:

import xlsxwriter

workbook = xlsxwriter.Workbook('chart_gauge.xlsx')
worksheet = workbook.add_worksheet()

chart_doughnut = workbook.add_chart({'type': 'doughnut'})
chart_pie = workbook.add_chart({'type': 'pie'})

# Add some data for the Doughnut and Pie charts. This is set up so the
# gauge goes from 0-100. It is initially set at 75%.
worksheet.write_column('H2', ['Donut', 25, 50, 25, 100])
worksheet.write_column('I2', ['Pie', 75, 1, '=200-I4-I3'])

# Configure the doughnut chart as the background for the gauge.
chart_doughnut.add_series({
    'name': '=Sheet1!$H$2',
    'values': '=Sheet1!$H$3:$H$6',
    'points': [
        {'fill': {'color': 'green'}},
        {'fill': {'color': 'yellow'}},
        {'fill': {'color': 'red'}},
        {'fill': {'none': True}}],
})

# Rotate chart so the gauge parts are above the horizontal.
chart_doughnut.set_rotation(270)

# Turn off the chart legend.
chart_doughnut.set_legend({'none': True})

# Turn off the chart fill and border.
chart_doughnut.set_chartarea({
    'border': {'none': True},
    'fill': {'none': True},
})

# Configure the pie chart as the needle for the gauge.
chart_pie.add_series({
    'name': '=Sheet1!$I$2',
    'values': '=Sheet1!$I$3:$I$6',
    'points': [
        {'fill': {'none': True}},
        {'fill': {'color': 'black'}},
        {'fill': {'none': True}}],
})

# Rotate the pie chart/needle to align with the doughnut/gauge.
chart_pie.set_rotation(270)

# Combine the pie and doughnut charts.
chart_doughnut.combine(chart_pie)

# Insert the chart into the worksheet.
worksheet.insert_chart('A1', chart_doughnut)

workbook.close()

Output:

enter image description here

jmcnamara
  • 38,196
  • 6
  • 90
  • 108