我想使用openpyxl在excel上绘制图表,但我不知道如何使用这个日期时间作为x轴
print(foPath,sheetName)
from openpyxl import load_workbook
from openpyxl.chart import (
LineChart,
Reference,Series
)
from openpyxl.chart.axis import DateAxis
wb = load_workbook(filename=foPath)
sheetsName = wb.sheetnames
# print(foPath)
sheet1 = wb[sheetsName[0]]
print(sheet1['P3'].value)
ws = wb.active
c2 = LineChart()
xvalues = Reference(ws,min_col=16,min_row=2,max_row=10000)
xxvalue = Reference(ws,min_col=17,min_row=2,max_row=10000)
sxvalue = Reference(ws,min_col=18,min_row=2,max_row=10000)
s1value = Reference(ws,min_col=19,min_row=2,max_row=10000)
s2value = Reference(ws,min_col=20,min_row=2,max_row=10000)
s3value = Reference(ws,min_col=21,min_row=2,max_row=10000)
s4value = Reference(ws,min_col=22,min_row=2,max_row=10000)
s5value = Reference(ws,min_col=23,min_row=2,max_row=10000)
c2.x_axis = DateAxis(crossAx=100)
c2.x_axis.number_format = 'yyyy-mm-dd'
c2.set_categories(xvalues)
# c2.x_axis = axis.DateAxis()
# c2.x_axis.number_format = "yyyy/mm/dd"
c2.add_data(xxvalue,titles_from_data=True)
c2.add_data(sxvalue,titles_from_data=True)
c2.add_data(s1value,titles_from_data=True)
c2.add_data(s2value,titles_from_data=True)
c2.add_data(s3value,titles_from_data=True)
c2.add_data(s4value,titles_from_data=True)
c2.add_data(s5value,titles_from_data=True)
ws.add_chart(c2,'A1')
wb.save(foPath)
在代码中,x值是我想要的x轴,它的时间数据,其他数据是y轴的。 这些代码没有设置日期的 x 轴,而是设置 1 到 100000,这也会导致一些问题,
如果我没有设置c2.x_axis 这些代码不设置日期的 x 轴,而是设置 1 到 100000, 但如果我设置它 这也会引起一些问题, 我该如何修复它 非常感谢
xvalues = Reference(ws,min_col=16,min_row=2,max_row=10000)
xxvalue = Reference(ws,min_col=17,min_row=2,max_row=10000)
sxvalue = Reference(ws,min_col=18,min_row=2,max_row=10000)
s1value = Reference(ws,min_col=19,min_row=2,max_row=10000)
s2value = Reference(ws,min_col=20,min_row=2,max_row=10000)
s3value = Reference(ws,min_col=21,min_row=2,max_row=10000)
s4value = Reference(ws,min_col=22,min_row=2,max_row=10000)
s5value = Reference(ws,min_col=23,min_row=2,max_row=10000)
这个数据行的标题来自row2,所以如果我需要将x值作为x轴。我需要忽略 row2 中的标题,所以我需要使用
xvalues = Reference(ws,min_col=16,min_row=3,max_row=10000)
它将从数据而不是标题开始。 仅此而已。