Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel xlsxwriter图表中的颜色管理_Excel_Python 2.7_Xlsxwriter - Fatal编程技术网

Excel xlsxwriter图表中的颜色管理

Excel xlsxwriter图表中的颜色管理,excel,python-2.7,xlsxwriter,Excel,Python 2.7,Xlsxwriter,Excel 2016/Python 2.7.6/XlsxWriter 1.1.1 我正在编写代码来选择文件,将它们编译成一个.xlsx文件,并将它们绘制在各自图纸上的两个图表上。理想情况下,我想强制来自同一选项卡的系列具有相同的颜色。不幸的是,xlsxwriter无法识别Excel 2016中的颜色名称 我更喜欢使用Excel默认选择的颜色顺序。其中一个图表很好(我没有指定颜色,它只有一个x&y轴,每个选项卡一个系列)。另一个则不然。我正在绘制一个系列,作为一条线与左Y轴相对,我正在绘制一个系列

Excel 2016/Python 2.7.6/XlsxWriter 1.1.1

我正在编写代码来选择文件,将它们编译成一个.xlsx文件,并将它们绘制在各自图纸上的两个图表上。理想情况下,我想强制来自同一选项卡的系列具有相同的颜色。不幸的是,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})
找到每种颜色的十六进制代码并使用它是最好的吗

对。只有有限的数量,它们的存在只是出于向后兼容的原因,也只是为了使示例更加清晰

如果您想要自己的调色板,那么您可以使用HTML颜色选择器()计算出一个调色板

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

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

有关此列表语法的解释,请参阅上的文档。

颜色选择器非常棒-比我在此之前找到的链接更有用!关于这一系列内容的信息很好。通过编程确定实际需要绘制的索引,我可以使我的代码更加健壮,这在将来会很有用。Excel确实在列中使用大写字母,但它也强制所有小写字母都使用大写字母。