使用 openpyxl 创建折线图 - "The reference is not valid"
Creating a line chart with openpyxl - "The reference is not valid"
我正在尝试使用 openpyxl 创建折线图。两个轴应该是time
和battery voltage
。使用 openpyxl 创建图表将一个轴设置为电池电压,另一个轴设置为行号。手动选择两列可以使图表正确。打开创建图表的 sheet 会出现错误:"The reference is not valid. References for titles, values, or sizes must be a single cell, row, column."
我不明白折线图怎么只能使用一列或一行。我在这里做错了什么?
import os
import openpyxl
import re
from datetime import date, datetime, timedelta, time
os.chdir('C:\Users\user\folder')
wb = openpyxl.load_workbook('file.xlsx')
wb.create_sheet('sheet2') # sheet where charts go
ws1 = wb['sheet1']
ws2 = wb['sheet2']
for cell in ws1['B:B']:
ws2.cell(row = cell.row, column = 1, value = cell.value)
for cell in ws1['D:D']:
ws2.cell(row = cell.row, column = 2, value = cell.value)
print('Creating charts...')
sheet = wb['sheet2'] # focus on sheet2 to pull data from/write chart to
refObj = openpyxl.chart.Reference(sheet, min_col=1, min_row=1, max_col=2, max_row=sheet.max_row)
seriesObj = openpyxl.chart.Series(refObj, title='Battery Voltage')
chartObj = openpyxl.chart.LineChart()
chartObj.title = 'Title'
chartObj.append(seriesObj)
sheet.add_chart(chartObj, 'C5')
wb.save('file.xlsx')
这是 openpyxl 创建的内容:
然后选择 A 列和 B 列并在 Excel 中创建一个折线图使我试图获得的图表:
我对 LineChart 对象的论点是否错误?
编辑:
refObj = openpyxl.chart.Reference(sheet, min_col=2, min_row=2, max_col=2, max_row=sheet.max_row)
正确创建图形,但将行号设置为 x 轴。我仍在尝试获取 x 轴上的时间。
仔细阅读文档解决了我的问题。这是制作具有正确格式的日期轴的折线图所需的代码(对于我的应用程序):
c1 = LineChart()
c1.title = "Title"
c1.y_axis.crossAx = 500
c1.x_axis = DateAxis(crossAx=100)
c1.x_axis.number_format = 'd-HH-MM-SS'
c1.x_axis.majorTimeUnit = "days"
c1.y_axis.title = "Voltage"
c1.x_axis.title = "Time"
data = Reference(ws2, min_col=2, min_row=1, max_col=2, max_row=sheet.max_row)
c1.add_data(data, titles_from_data=True)
dates = Reference(ws2, min_col=1, min_row=2, max_row=sheet.max_row)
c1.set_categories(dates)
我正在尝试使用 openpyxl 创建折线图。两个轴应该是time
和battery voltage
。使用 openpyxl 创建图表将一个轴设置为电池电压,另一个轴设置为行号。手动选择两列可以使图表正确。打开创建图表的 sheet 会出现错误:"The reference is not valid. References for titles, values, or sizes must be a single cell, row, column."
我不明白折线图怎么只能使用一列或一行。我在这里做错了什么?
import os
import openpyxl
import re
from datetime import date, datetime, timedelta, time
os.chdir('C:\Users\user\folder')
wb = openpyxl.load_workbook('file.xlsx')
wb.create_sheet('sheet2') # sheet where charts go
ws1 = wb['sheet1']
ws2 = wb['sheet2']
for cell in ws1['B:B']:
ws2.cell(row = cell.row, column = 1, value = cell.value)
for cell in ws1['D:D']:
ws2.cell(row = cell.row, column = 2, value = cell.value)
print('Creating charts...')
sheet = wb['sheet2'] # focus on sheet2 to pull data from/write chart to
refObj = openpyxl.chart.Reference(sheet, min_col=1, min_row=1, max_col=2, max_row=sheet.max_row)
seriesObj = openpyxl.chart.Series(refObj, title='Battery Voltage')
chartObj = openpyxl.chart.LineChart()
chartObj.title = 'Title'
chartObj.append(seriesObj)
sheet.add_chart(chartObj, 'C5')
wb.save('file.xlsx')
这是 openpyxl 创建的内容:
然后选择 A 列和 B 列并在 Excel 中创建一个折线图使我试图获得的图表:
我对 LineChart 对象的论点是否错误?
编辑:
refObj = openpyxl.chart.Reference(sheet, min_col=2, min_row=2, max_col=2, max_row=sheet.max_row)
正确创建图形,但将行号设置为 x 轴。我仍在尝试获取 x 轴上的时间。
仔细阅读文档解决了我的问题。这是制作具有正确格式的日期轴的折线图所需的代码(对于我的应用程序):
c1 = LineChart()
c1.title = "Title"
c1.y_axis.crossAx = 500
c1.x_axis = DateAxis(crossAx=100)
c1.x_axis.number_format = 'd-HH-MM-SS'
c1.x_axis.majorTimeUnit = "days"
c1.y_axis.title = "Voltage"
c1.x_axis.title = "Time"
data = Reference(ws2, min_col=2, min_row=1, max_col=2, max_row=sheet.max_row)
c1.add_data(data, titles_from_data=True)
dates = Reference(ws2, min_col=1, min_row=2, max_row=sheet.max_row)
c1.set_categories(dates)