Создание диаграммы в Python 3.5 с использованием XlsxWriter, где значения рядов основаны на цикле

#python #excel #graph #charts #xlsxwriter

#python #excel #График #Диаграммы #xlsxwriter

Вопрос:

Я использую Python 3.5 в Windows 10. Надеюсь, я смогу сформулировать, чего я пытаюсь достичь, допуская при этом как можно меньше путаницы…

Я написал скрипт на Python, который выполняет несколько задач, некоторые из которых включают создание книги Excel с помощью XlsxWriter на основе данных, сгенерированных из кода в предыдущих частях сценария. Я пытаюсь, чтобы мой скрипт также создал диаграмму, снова используя XlsxWriter, на основе этих данных. Я видел несколько примеров, доступных онлайн, и, хотя они полезны, между примерами и моим личным кодом есть одно конкретное различие, которое заставляет меня сомневаться в том, как я мог бы действовать.

Моя проблема возникает при попытке добавить ряд к диаграмме. При настройке ряда несколько примеров, с которыми я столкнулся, включают что-то вроде этого (примечание: на самом деле я не использую этот точный код):

 chart.add_series({
'name': '=Sheet1!$A$2:$A$7 '
})
  

Из-за природы моего скрипта, который включает в себя циклирование и переменную длину, сгенерированные данные могут быть заполнены по различным столбцам и строкам, поэтому я не могу присвоить чему-то вроде ‘name’ фиксированную ссылку, такую как ‘Sheet1!$ A $ 2: $ A $ 7’, потому что, хотя все данные, сгенерированные из моего скрипта, будут существовать на одном листе, они никогда не будут последовательно находиться только в столбце ‘A’ и только между ячейками 2-7.

Итак, как я могу обойти это? Опять же, из-за переменных элементов и тому подобного, способ, которым я сказал XlsxWriter заполнять ячейки, заключается в создании переменных row_1 = 0 и col_1 = 0 и увеличении их по мере необходимости. Я могу написать что-то вроде

 chart.add_series({
'name': '=Sheet1!row:col 7'
})
  

через XlsxWriter?

РЕДАКТИРОВАТЬ: Итак, я только что узнал, что могу использовать альтернативную индексацию, которая, по-видимому, является моим обходным путем для добавления ряда к диаграмме. Однако я получаю следующее сообщение об ошибке:

 UserWarning: Must specify 'values' in add_series()
warn("Must specify 'values' in add_series()")
  

На основе этого фрагмента кода:

 chart.add_series({
'Subscribers': ['Sheet1', row_1   2, col_1, 
               2   len(sb_subCount_list_clean), col_1] 
})
  

Это потому, что я использую переменные в качестве своих индексов? sb_subCount_list_clean — это список, содержащий данные, которые я использую для создания диаграммы. Столбец будет иметь эту длину плюс 2, потому что у меня есть несколько заголовков, занимающих первые две ячейки.

Ответ №1:

Почти во всех частях XlsxWriter API, везде, где есть ссылка на ячейку типа A1 или диапазон типа =Sheet1!$A$1 , вы можете использовать кортеж или список значений. Для диаграмм вы можете использовать список значений, подобных этому:

 # String interface. This is good for static ranges.
chart.add_series({
    'name':       '=Sheet1!$A$1',
    'categories': '=Sheet1!$B$1:$B$5',
    'values':     '=Sheet1!$C$1:$C$5',
})

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

Обратитесь к документам.

Что касается ошибки, которую вы получаете (после редактирования): Subscribers это не параметр XlsxWriter, вы, вероятно, имеете в виду values :

  chart.add_series({
      'values': ['Sheet1', row_1   2, col_1, 
                 2   len(sb_subCount_list_clean), col_1] 
 })
  

Комментарии:

1. Большое вам спасибо! Я наткнулся на ссылку на ячейки в виде списка значений, как вы упомянули!