xlsxwriter结合图表类型

时间:2015-06-19 00:26:23

标签: python excel xlsxwriter

我有一张具有以下方案的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执行此操作?

1 个答案:

答案 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()

输出:

enter image description here

注意,这会为第一个系列中的每个数据点添加一个平均点。如果您愿意,可以用两点来做到这一点。

另外,自己计算平均值可以让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上的文档部分。