построение графика в al oop путем индексации столбцов max и min в add_series - PullRequest
0 голосов
/ 08 марта 2020

Я пытаюсь построить гистограмму, используя xlsxwriter, но у меня есть список данных и я хочу нарисовать гистограмму для каждого кадра, используя al oop. Поэтому мне нужно add_series с values и categories с каждым фреймом данных, который имеет разные размеры, как я могу прочитать каждый фрейм данных и индексировать столбцы max и min для каждого фрейма данных?

# open an excel
writer = pd.ExcelWriter('pandas_charts.xlsx', engine='xlsxwriter')

for i in list(df_list):
    df = df_list[i]
    df.to_excel(writer, sheet_name=i, index=False)

    workbook = writer.book
    worksheet = writer.sheets[i]

    ## add bar chart in each sheet
    chart = workbook.add_chart({'type':'bar'})

    ## what should I replace '!B$2:$B$8' and '!A$2:$A$8'?
    chart.add_series({'values':'=' + i + '!B$2:$B$8',
                      'categories':'=' + i + '!A$2:$A$8'
                     })
    worksheet.insert_chart('D1', chart)

writer.save()

Спасибо!

1 Ответ

1 голос
/ 08 марта 2020

Большинство API-интерфейсов XlsxWriter поддерживают как диапазон стилей A1, так и набор значений в стиле (row, col). Это также относится к chart.add_series ()


chart.add_series({
    'categories': '=Sheet1!$A$1:$A$5',
    'values':     '=Sheet1!$B$1:$B$5',
})

# Or using a list of values instead of category/value formulas:
#     [sheetname, first_row, first_col, last_row, last_col]
chart.add_series({
    'categories': ['Sheet1', 0, 0, 4, 0],
    'values':     ['Sheet1', 0, 1, 4, 1],
})

Поэтому в вашем примере вы можете сделать что-то вроде этого:

sheet_name = i  # Or str(i)

row_min = 1
row_max = len(df) + 1
col_min = 0
col_max = 1

chart.add_series({
    'categories': [sheet_name, row_min, col_min, row_max, col_min],
    'values':     [sheet_name, row_min, col_max, row_max, col_max],
})

См. Также this Pandas пример диаграммы из документов XlsxWriter.

...