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})
答案 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()上的文档。