управление цветом в диаграмме xlsxwriter - PullRequest
1 голос
/ 19 июня 2019

Excel 2016 / Python 2.7.6 / XlsxWriter 1.1.1

Я пишу код, чтобы выбрать файлы, скомпилировать их в один файл .xlsx и нанести их на 2 диаграммы на своих собственных листах.В идеале я бы хотел, чтобы серии из одной вкладки были одинакового цвета.К сожалению, xlsxwriter не распознает имена цветов из Excel 2016.

Я бы предпочел использовать порядок цветов, который Excel выбирает по умолчанию.Один из графиков в порядке (я не указываю цвет, это только одна ось X и Y, одна серия на вкладку).Другой менее так.Я строю одну серию в виде линии против левой оси Y, я строю одну против правой оси Y, и я хочу сопоставить цвет, и я строю третью серию также против правой оси Y, и я хочуиспользуйте только маркеры для этого.Количество вкладок не ограничено, но обычно их будет 5.

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

Можно ли разрешить xlsxwriter выбрать цвета, а затем получить цвет для этой серии и применить ее к следующей?Лучше всего найти шестнадцатеричный код для каждого цвета и использовать его вместо этого?

colors = ['blue', 'red', 'Olive Green', 'purple', 'Aqua', 'orange', 'lime', 'magenta', 'navy',  'pink', 'cyan',
          'silver', 'brown'] #named colors to cycle through

series_to_delete = [] #for legend simplicity
series = len(files) 
j = 0


for df, tab in zip(dfs, tabs):
    if j > len(colors): #if you run out of colors, go back to the beginning
        j = 0
    color = colors[j] #choose a color
    df.to_excel(writer, tab) #write the df to a tab

    x_categories = "='" + tab + "'!$a$2:$a$5000"  #for the first plot
    y_values = "='" + tab + "'!$c$2:$c$5000" #y values used in both plots

    x2_categories = "='" + tab + "'!$b$2:$b$5000" #second plot, x axis

    y2_values = "='" + tab + "'!$d$2:$d$5000" #second plot, second y axis

    x3_categories = "='" + tab + "'!$e$2:$e$5000" #these are markers
    y3_values = "='" + tab + "'!$f$2:$f$5000" #this is the 3rd series on plot 2

    chart.add_series({'name': tab, 'categories': x_categories, 'values': y_values}) #plot 1, note no named color
    chart2.add_series({'name': tab, 'categories': x2_categories, 'values': y_values, 'line': {'color': color}}) #plot 2, against 1st y axis
    chart2.add_series({'name': tab, 'categories': x2_categories, 'values': y2_values, 'y2_axis': 1,
                   'line': {'color': color, 'transparency': 50}}) #plot 2, against 2nd y axis

    chart2.add_series({'categories': x3_categories, 'values': y3_values, 'line':   {'none': True},
                   'marker': {'type': 'automatic'}, 'y2_axis': 1,
                   'data_labels': {'value': True, 'category': True, 'separator': "\n"}}) #plot 2, against 2nd y axis

    j += 1
    series_to_delete.append(series) #this is so the legend isn't cluttered
    series_to_delete.append(series + 1) #with each series named 3X
    series += 2

chart2.set_legend({'delete_series': series_to_delete})

1 Ответ

1 голос
/ 19 июня 2019

Лучше ли найти шестнадцатеричный код для каждого цвета и использовать его вместо этого?

Да.В XlsxWriter имеется только ограниченное количество именованных цветов, и они существуют только для целей обратной совместимости и для более наглядных примеров.

Если вам нужна собственная цветовая палитра, тогда вы можете работатьодин из них с использованием палитры цветов HTML (, такой как этот ).

Обратите внимание, что ваши диапазоны, такие как $a$2:$a$5000, неверны.Excel использует заглавные буквы столбцов.Лучше избегать попыток создать эти типы диапазонов вручную и использовать вместо этого синтаксис списка для категорий и значений, например:

chart.add_series({'name': tab, 
                  'categories': [tab, 1, 0, 4999, 0], 
                  'values':     [tab, 1, 2, 4999, 2]})

См. Документы по add_series () для объяснения синтаксиса этого списка.

...