在xlsxwriter图表中管理颜色

时间:2019-06-18 21:10:11

标签: excel python-2.7 xlsxwriter

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 个答案:

答案 0 :(得分:1)

  

最好找到每种颜色的十六进制代码并改用它吗?

是的。 named colors in XlsxWriter的数量有限,它们的存在仅出于向后兼容的原因,并且使示例更清晰。

如果您想要自己的调色板,则可以使用HTML颜色选择器(such as this one)来解决。

请注意,您的范围(例如$a$2:$a$5000)是错误的。 Excel使用大写的列字母。更好的方法是避免尝试手动构造这些类型的范围,而将列表语法用于类别和值,例如:

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

有关此列表语法的说明,请参见add_series()上的文档。