Как объединить две линейные диаграммы с (Numbers / Percentage) для оси Y и датой для оси X и установить масштабирование с помощью openpyxl - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть этот фрейм данных, который содержит столбец даты, столбец суммы и столбец процентного значения. Хотите нарисовать график, в котором есть столбец даты для оси x, столбец суммы для оси y слева и столбец процента для оси y справа.

Я мог бы построить нижеприведенный код, чтобы нарисовать два графика и объединить в один , Но вторая ось y не отображается должным образом. И строки, относящиеся к процентным значениям, не отображаются. Я думаю, что это связано с проблемой масштабирования. Некоторая помощь будет принята с благодарностью, так как я не могу понять, почему вторая ось y не отображается, и значение следующих свойств.

updating_file = "D:\\Testing\\Pivot.xlsx"

wb = load_workbook(filename=updating_file, data_only=True)
sheet = wb["Sheet1"]
columns = next(sheet.values)[0:]
current_sheet_df = pd.DataFrame(sheet.values, columns=columns)

c1 = LineChart()
c1.title = None
c1.y_axis.title = None

c1.y_axis.crossAx = 500
c1.x_axis = DateAxis(crossAx=100)
c1.x_axis.number_format = 'd-mmm'
c1.x_axis.lblAlgn = 'l'
c1.x_axis.majorTimeUnit = "days"
c1.x_axis.title = "Date"

data1 = Reference(sheet, min_col=10, min_row=3, max_row=current_sheet_df.shape[0]+2)
data2 = Reference(sheet, min_col=14, min_row=3, max_row=current_sheet_df.shape[0]+2)
c1.add_data(data1, titles_from_data=True)
c1.add_data(data2, titles_from_data=True)

dates = Reference(sheet, min_col=9, min_row=4, max_row=current_sheet_df.shape[0]+2)
c1.set_categories(dates)

# Create a second chart
c2 = LineChart()
v2 = Reference(sheet, min_col=11, max_col=13, min_row=3, max_row=current_sheet_df.shape[0]+2)
c2.add_data(v2, titles_from_data=True)
c2.set_categories(dates)
# c2.y_axis.axId = 200
c2.y_axis.title = None

c2.x_axis = DateAxis(crossAx=100)
c2.x_axis.number_format = 'd-mmm'
c2.x_axis.lblAlgn = 'l'
c2.x_axis.majorTimeUnit = "days"
c2.x_axis.title = "Date"
c2.y_axis.majorGridlines = None
c1.y_axis.majorGridlines = None


# Display y-axis of the second chart on the right by setting it to cross the x-axis at its maximum
c1.y_axis.crosses = "min"
c2.y_axis.crosses = "max"
c1 += c2

c1.legend.position = 't'

# # Style the lines
s1 = c1.series[0]
s1.graphicalProperties.line.solidFill = "BDCDCD" # Marker outline

sheet.add_chart(c1, "Q20")

wb.save(filename=updating_file)

График, нарисованный с помощью приведенного выше кода, выглядит следующим образом:

enter image description here

Хотите нарисовать что-то вроде ниже.

enter image description here

...