使用Xlsxwriter在轴上添加特定值

1 投票
1 回答
48 浏览
提问于 2025-04-12 00:58
import xlsxwriter

# Create a new Excel workbook and add a worksheet
workbook = xlsxwriter.Workbook('chart_with_trendline.xlsx')
worksheet = workbook.add_worksheet()

# Sample data
x_data = [1, 2, 3, 4, 5, 6, 7]  # Adding more values to x_data
y_data = [5, 4, 3, 2, 1, 2, 3]  # Adding more values to y_data

gearChange = 2 #index 2 

line_x_data = []
line_y_data = []

line_x_data.append(x_data[gearChange])
line_y_data.append(y_data[gearChange])
line_x_data.append(x_data[gearChange])
line_y_data.append(0)

# Write data to the worksheet
worksheet.write_column('A1', x_data)
worksheet.write_column('B1', y_data)

# Write line data to worksheet
worksheet.write_column('C1', line_x_data)
worksheet.write_column('D1', line_y_data)

# Add a chart object
chart = workbook.add_chart({'type': 'scatter'})

# Add scatter series to the chart
chart.add_series({
    'name': 'Y1',
    'categories': '=Sheet1!$A$1:$A$7',
    'values': '=Sheet1!$B$1:$B$7',
    'marker': {'type': 'circle'}
})


# Add line series to the chart
chart.add_series({
    'categories': '=Sheet1!$C$1:$C$2',  # Adjusted for new data range
    'values':     '=Sheet1!$D$1:$D$2',  # Adjusted for new data range
    'line': {'type': 'linear'}     # Adding linear trendline
})

# Set chart title and axis labels
chart.set_title({'name': 'Chart With Trendline'})
chart.set_x_axis({'name': 'X Axis'})
chart.set_y_axis({'name': 'Y Axis'})

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

# Close the workbook
workbook.close()

这是我目前的代码。
我想在X轴上添加一个值3,因为这是我绘制的线的X轴截距。
我查阅了文档,但似乎找不到任何可以让我做到这一点的函数。我也问过ChatGPT,但没有找到解决办法。
如果有更好的方法在特定的换挡点绘制垂直线,那就太好了,因为我在这上面卡了几天(这是一个更大项目的一部分)。任何帮助都将非常感激。

我尝试修改这一行:

chart.set_x_axis({'name': 'X Axis'})

改成这样:

chart.set_x_axis({'name': 'X Axis', 'major_tick_values': line_x_data})

目的是在X轴上显示3,但没有成功。

1 个回答

1

只需将主要单位设置为1,这样坐标轴就会以1为单位从1数到8。

在x轴的设置中添加这个

chart.set_x_axis({'name': 'X Axis'})
chart.set_x_axis({
    'name': 'X Axis',
    'major_unit': 1,  # set major unit to 1
})

主要单位设置为1的图表


你还可以给系列添加一个标签,比如;
# Add line series to the chart
chart.add_series({
    'categories': '=Sheet1!$C$1:$C$2',  # Adjusted for new data range
    'values':     '=Sheet1!$D$1:$D$2',  # Adjusted for new data range
    'line': {'type': 'linear'},         # Adding linear trendline
    'data_labels': {'value': False,     # Add Data Label
                    'position': 'below',
                    'category': True,
                    }
})

这只是给你的系列加上标签,底部的标签会放在X轴上。
你会注意到,值是在起始和结束点设置的,但我觉得用Xlsxwriter没有办法去掉顶部的文本框。不过你可以手动去掉,只需双击文本框,然后按删除键就可以了。
另外,如果你愿意,也可以手动移动底部的文本框,使其与其他数字对齐。在这里输入图像描述


添加垂直线的其他选项
你可以使用误差条来添加一条垂直线,但这样并不会提供额外的功能。实际上,你需要改变主要单位才能在x轴上看到3,因为它没有数据标签。
除此之外,我想你也可以直接在图表上添加一条绘图线或文本框。

撰写回答