#xlsxwriter
#xlsxwriter
Вопрос:
Я пытаюсь создать гистограмму с линией тренда. Я могу сделать это в Excel и хотел бы автоматизировать процесс. xlswriter довольно прост в использовании, и я скопировал гистограмму, у меня не работает только линия тренда. Кажется, что это добавляет 2 элемента — линию и дополнительную полосу в верхней части каждого стека.
Это код для создания диаграммы слева
import xlsxwriter
# create worbook, workseet and chart
workbook = xlsxwriter.Workbook("Example.xlsx")
worksheet = workbook.add_worksheet()
chart1 = workbook.add_chart({'type': 'column', 'subtype': 'stacked'})
# Add the worksheet data
headings = ['Model 1', 'Model 2', 'Capacity']
data = [
[10, 40, 50, 20, 10, 50],
[30, 60, 70, 50, 40, 30],
[20, 30, 40, 40, 30, 30]
]
worksheet.write_row('A1', headings)
worksheet.write_column('A2', data[0])
worksheet.write_column('B2', data[1])
worksheet.write_column('C2', data[2])
# Configure the first series.
chart1.add_series({
'name': '=Sheet1!$A$1',
'values': '=Sheet1!$A$2:$A$7',
})
# Configure the first series.
chart1.add_series({
'name': '=Sheet1!$B$1',
'values': '=Sheet1!$B$2:$B$7',
})
chart1.add_series({
'name': '=Sheet1!$C$1',
'values': '=Sheet1!$C$2:$C$7',
'trendline': {'type': 'linear'},
})
# Set an Excel chart style.
chart1.set_style(11)
# Add a chart title
chart1.set_title ({'name': 'xlsxwriter chart'})
# Insert the chart into the worksheet (with an offset).
worksheet.insert_chart('F1', chart1)
# Finally, close the Excel file
workbook.close()
Столбцы выделяют данные, которые я пытаюсь вставить в качестве линии тренда. Будем признательны за любую помощь.
Комментарии:
1. «Кажется, что добавляется 2 элемента — линия и дополнительные выделенные столбцы». Что вы под этим подразумеваете? Неясно, с какой проблемой вы столкнулись. Не могли бы вы объяснить немного больше.
2. На рисунке есть черная линия, которая идет от 18 до, возможно, 9. Сверху также расположены серые столбики, каждый размером 7. На вертикальной оси должна быть горизонтальная линия в точке 7.
3. добавлено изображение того, что я ожидал, без дополнительной линейки и диагональной линии тренда
4. Всего столбцов 7, и когда вы нажимаете на них, они соответствуют тому, что было задумано в коде ‘values’: f»='{chartSheetName}’!$I ${row}:$AQ $ {row}»
5. К сожалению, там недостаточно информации, чтобы выяснить, в чем заключается ваша проблема или как ее исправить. Похоже, что вы добавляете ряд к столбчатой диаграмме со стеком с линией тренда. Попробуйте создать рабочий пример меньшего размера, демонстрирующий проблему, и задайте вопрос еще раз.
Ответ №1:
Похоже, что вы пытаетесь добавить вспомогательный линейный график, а не линию тренда. Вы можете сделать это с помощью метода XlsxWriter chart.combine().
Вот так:
import xlsxwriter
# create worbook, workseet and chart
workbook = xlsxwriter.Workbook("Example.xlsx")
worksheet = workbook.add_worksheet()
chart1 = workbook.add_chart({'type': 'column', 'subtype': 'stacked'})
# Add the worksheet data
headings = ['Model 1', 'Model 2', 'Capacity']
data = [
[10, 40, 50, 20, 10, 50],
[30, 60, 70, 50, 40, 30],
[20, 30, 40, 40, 30, 30]
]
worksheet.write_row('A1', headings)
worksheet.write_column('A2', data[0])
worksheet.write_column('B2', data[1])
worksheet.write_column('C2', data[2])
# Configure the first series.
chart1.add_series({
'name': '=Sheet1!$A$1',
'values': '=Sheet1!$A$2:$A$7',
})
# Configure the first series.
chart1.add_series({
'name': '=Sheet1!$B$1',
'values': '=Sheet1!$B$2:$B$7',
})
# Add a chart title
chart1.set_title ({'name': 'xlsxwriter chart'})
# Create a second line chart.
chart2 = workbook.add_chart({'type': 'line'})
chart2.add_series({
'name': '=Sheet1!$C$1',
'values': '=Sheet1!$C$2:$C$7',
})
# Combine the charts.
chart1.combine(chart2)
# Insert the chart into the worksheet (with an offset).
worksheet.insert_chart('F1', chart1)
# Finally, close the Excel file
workbook.close()
Вывод: