Openpyxl не показывает второй график - PullRequest
0 голосов
/ 26 июня 2019

РЕДАКТИРОВАТЬ: Решено, решение в ответе ниже.

У меня есть график, созданный с помощью openpyxl, который имеет две оси y, совместно использующие DateAxis.Хотя первый выбор данных отображается на графике, второй - нет.Внизу графика есть странная серая линия, которой раньше не было.Я думаю, что это просто маленькая ошибка, которую я где-то упускаю, но я не вижу где.Особенно учитывая, что мой диапазон ячеек определен правильно.Что я могу делать не так?

enter image description here

import openpyxl
from openpyxl import Workbook, chart
from openpyxl.chart import LineChart, Reference, Series
from openpyxl.chart.axis import DateAxis
from datetime import date, datetime, timedelta, time
ws2 = wb['sheet2']
dates = chart.Reference(ws2, min_col=1, min_row=2, max_row=sheet.max_row)
vBat = chart.Reference(ws2, min_col=2, min_row=1, max_col=2, max_row=sheet.max_row)
qBat = chart.Reference(ws2, min_col=3, min_row=1, max_col=3)

c1 = chart.LineChart()
c1.title = "SLA Discharge - 5.5A: V_BAT"
c1.style = 12
c1.x_axis.majorTimeUnit = "days"
c1.x_axis = chart.axis.DateAxis()
c1.x_axis.title = "Time"
c1.x_axis.crosses = "min"
c1.x_axis.majorTickMark = "out"
c1.x_axis.number_format = 'd-HH-MM-SS'
c1.add_data(vBat, titles_from_data=True)
c1.set_categories(dates)
c1.y_axis.title = "Battery Voltage"
c1.y_axis.crossAx = 500
c1.y_axis.majorGridlines = None


c2 = chart.LineChart()
c2.x_axis.axId = 500 # same as c1
c2.add_data(qBat, titles_from_data=True, from_rows=True)
c2.set_categories(dates)
c2.y_axis.axId = 200
c2.y_axis.title = "Qbat Percentage"
c2.y_axis.crossAx = 500

c1.y_axis.crosses = "max"
c1 += c2


s1 = c1.series[0]
s1.graphicalProperties.line.solidFill = "BE4B48"
s1.graphicalProperties.line.width = 25000 # width in EMUs.
s1.smooth = True # Make the line smooth
s2 = c2.series[0]
s2.graphicalProperties.line.solidFill = "48BBBE"
s2.graphicalProperties.line.width = 25000 # width in EMUs.
s2.smooth = True # Make the line smooth
ws2.add_chart(c1, "D5")

Интересно, что

vBat = chart.Reference(ws2, min_col=2, min_row=1, max_col=2, max_row=sheet.max_row)

в порядке.Однако, делая то же самое с qBat с помощью:

qBat = chart.Reference(ws2, min_col=3, min_row=1, max_col=3, max_row=sheet.max_row)

«портит» рабочую книгу и отображает сообщение об ошибке при открытии и не печатает никакой диаграммы.Удаление max_row=sheet.max_row из обеих строк приводит к неправильному DateAxis, где есть только две точки, и они оба первые два значения в столбце time.

1 Ответ

0 голосов
/ 26 июня 2019

сначала, в c2.add_data(qBat, titles_from_data=True, from_rows=True), удалите from_rows=True.

Затем измените qBat на:

qBat = chart.Reference(ws2, min_col=3, min_row=1, max_col=3, max_row=sheet.max_row)

...