我有一张具有以下方案的Excel图表
A B C D
ID Reading 1 Reading 2 Avg Reading 1
0 4.2 6.7 3.98
1 4.4 8.8
2 4.5 9
3 5.6 4
4 1.2 4.5
我能够用阅读1和阅读2绘制直方图。
chart_1 = workbook.add_chart({'type': 'column'})
chart_1.add_series({
'name': '=Sheet1!$B$1',
'categories': '=Sheet1!$A$2:$A$4,
'values': '=Sheet1!$B$2:$B$4,
})
我想在直方图上覆盖代表平均读数1的线。我如何使用python和xlsxwriter执行此操作?
答案 0 :(得分:0)
Excel和XlsxWriter支持图表中的Trendlines。但是,只有一个移动平均线选项,而不是一个固定的平均期权(这是有意义的,因为它意味着趋势)。
在Excel中执行此类操作的常用方法是在直方图上添加平均值的折线图。
以下是基于您的数据的小型工作示例:
from xlsxwriter.workbook import Workbook
workbook = Workbook('chart_combined.xlsx')
worksheet = workbook.add_worksheet()
# Add a format for the headings.
bold = workbook.add_format({'bold': True})
# Make the columns wider.
worksheet.set_column('B:C', 12)
# Add the worksheet data that the charts will refer to.
headings = ['ID', ' Reading 1', ' Avg Reading 1']
data = [
[0, 1, 2, 3, 4],
[4.2, 4.4, 4.5, 5.6, 1.2],
[3.98, 3.98, 3.98, 3.98, 3.98],
]
worksheet.write_row('A1', headings, bold)
worksheet.write_column('A2', data[0])
worksheet.write_column('B2', data[1])
worksheet.write_column('C2', data[2])
# Create a combined column and line chart that share the same X and Y axes.
# First create a column chart. This will use this as the primary chart.
column_chart = workbook.add_chart({'type': 'column'})
# Configure the data series for the primary chart.
column_chart.add_series({
'name': '=Sheet1!$B$1',
'categories': '=Sheet1!$A$2:$A$6',
'values': '=Sheet1!$B$2:$B$6',
})
# Create a line chart. This will use this as the secondary chart.
line_chart = workbook.add_chart({'type': 'line'})
# Configure the data series for the secondary chart.
line_chart.add_series({
'name': '=Sheet1!$C$1',
'categories': '=Sheet1!$A$2:$A$6',
'values': '=Sheet1!$C$2:$C$6',
})
# Combine the charts.
column_chart.combine(line_chart)
# Insert the chart into the worksheet
worksheet.insert_chart('E2', column_chart)
workbook.close()
输出:
注意,这会为第一个系列中的每个数据点添加一个平均点。如果您愿意,可以用两点来做到这一点。
另外,自己计算平均值可以让Excel使用公式来计算。例如,对上述程序进行了此更改:
# Add the worksheet data that the charts will refer to.
headings = ['ID', ' Reading 1', ' Avg Reading 1']
data = [
[0, 1, 2, 3, 4],
[4.2, 4.4, 4.5, 5.6, 1.2],
['=AVERAGE($B$2:$B$6)'] * 5,
]
另请参阅XlsxWriter中combined charts上的文档部分。