首页 > 解决方案 > 无法在 xlsxwriter 中组合线图和两个散点图。也有着色绘图符号的问题

问题描述

我正在尝试创建一个带有折线图和两个散点图的电子表格图。我试图为每个散点图设置不同的符号:

# create the chart and add it to the workbook:
value_line_chart = workbook.add_chart({'type': 'line'})
value_line_chart.set_y_axis({'name': 'Values'})
value_line_chart.set_x_axis({'name': 'Time'})
value_line_chart.set_title({'name': 'Chart of {}'.format(historical_data.symbol)})
value_line_chart.add_series({
    'line': {
        'color': 'cyan',
        'width': .5
    },
    'values': [worksheet.name, data_start_row, value_col, last_col, value_col],
    'categories': [worksheet.name, data_start_row, date_col, last_col, date_col],
    'name': "data",
})
scatter_buy_chart = workbook.add_chart({'type': 'scatter'})
scatter_buy_chart.add_series({
    'marker': {
        'type': 'long_dash',
        'size': 5,
        'border': {'color': 'red'},
        'fill': {'color': 'red'},
    },
    'values': [worksheet.name, data_start_row, buy_action_col, last_col, buy_action_col],
    'categories': [worksheet.name, data_start_row, date_col, last_col, date_col],
    'name': "buy",
})
value_line_chart.combine(scatter_buy_chart)
scatter_sell_chart = workbook.add_chart({'type': 'scatter'})
scatter_sell_chart.add_series({
    'marker': {
        'type': 'plus',
        'size': 5,
        'border': {'color': 'green'},
        'fill': {'color': 'green'},
    },
    'values': [worksheet.name, data_start_row, sell_action_col, last_col, sell_action_col],
    'categories': [worksheet.name, data_start_row, date_col, last_col, date_col],
    'name': "buy",
})
value_line_chart.combine(scatter_sell_chart)
value_line_chart.set_size({'width': 720, 'height': 576})
value_line_chart.set_x_axis({
    'date_axis': True,
    'min': date_data[0],
    'max': date_data[len(date_data)-1]
})
value_line_chart.set_legend({'none': True})
worksheet.insert_chart('B1', value_line_chart)
workbook.close()

我遇到的问题是:

  1. 我无法显示第二个散点图
  2. 我无法改变符号的颜色

我尝试单独渲染折线图和散点图,并且数据和符号形状正确显示。

  1. 我可以更改折线图的颜色。
  2. 我能够改变符号的形状。
  3. 我能够渲染折线图和两个散点图之一。

标签: pythonxlsxwriter

解决方案


通过将所有系列添加到单个图表中,我能够获得我正在寻找的结果: 在此处输入图像描述

# create the chart and add it to the workbook:
chart = workbook.add_chart({'type': 'line'})
chart.set_y_axis({'name': 'Values'})
chart.set_x_axis({'name': 'Time'})
chart.set_title({'name': 'Chart of {}'.format(historical_data.symbol)})
chart.add_series({
    'line': {
        'color': 'cyan',
        'width': .5
    },
    'values': [worksheet.name, data_start_row, value_col, last_col, value_col],
    'categories': [worksheet.name, data_start_row, date_col, last_col, date_col],
    'name': "data",
})
chart.add_series({
    'marker': {
        'type': 'long_dash',
        'size': 8,
        'border': {'color': 'red'},
        'fill': {'color': 'red'},
    },
    'values': [worksheet.name, data_start_row, buy_action_col, last_col, buy_action_col],
    'categories': [worksheet.name, data_start_row, date_col, last_col, date_col],
    'name': "buy",
})
chart.add_series({
    'marker': {
        'type': 'plus',
        'size': 8,
        'border': {'color': 'green'},
        'fill': {'color': 'green'},
    },
    'values': [worksheet.name, data_start_row, sell_action_col, last_col, sell_action_col],
    'categories': [worksheet.name, data_start_row, date_col, last_col, date_col],
    'name': "buy",
})
chart.set_size({'width': 720, 'height': 576})
chart.set_x_axis({
    'date_axis': True,
    'min': date_data[0],
    'max': date_data[len(date_data)-1]
})
chart.set_legend({'none': True})
worksheet.insert_chart('B1', chart)
workbook.close()

推荐阅读