从ScatterChart移除标题

时间:2019-05-28 06:59:52

标签: python-3.x openpyxl

我想知道如何在不使用与图表标题相同的名称的情况下(仅使用散点图)为数据系列分配名称。我想只获得系列名称作为图例,而完全不获得图表标题。

我意识到autoTitleDeleted的值必须为1。

因此,在查阅文档时,我发现“ chartContainer”是实现上述选项的类。因此,我导入该类并将其应用于下一个:

from openpyxl import Workbook
from openpyxl.chart import (
        ScatterChart,
        Reference,
        Series,
)
from openpyxl.chart.chartspace import ChartContainer

wb = Workbook()
ws = wb.active

rows = [
        ["Size", "Batch 1", "Batch 2"],
        [2, 40, 30],
        [3, 40, 25],
        [4, 50, 30],
        [5, 30, 25],
        [6, 25, 35],
        [7, 20, 40],
]

for row in rows:
    ws.append(row)    

chart2 = ScatterChart()

chart2.x_axis.title = "Size"
chart2.y_axis.title = "Percentage"

xvalues = Reference(ws, min_col = 1, min_row = 2, max_row = 7)
values = Reference(ws, min_col = 3, min_row = 1, max_row = 7)
series1 = Series(values, xvalues)
chart2.series.append(series1)

chart2 = ChartContainer(autoTitleDeleted = 1)

ws.add_chart(chart2, "J10")

wb.save("Ex1.xlsx")

但是,出现下一个错误:

`runfile('C:/Users/Administrador/Desktop/Pre-Try/Ex1/Ex1.py',wdir ='C:/ Users / Administrador / Desktop / Pre-Try / Ex1') 追溯(最近一次通话):

文件“”,第1行,在     runfile('C:/Users/Administrador/Desktop/Pre-Try/Ex1/Ex1.py',wdir ='C:/ Users / Administrador / Desktop / Pre-Try / Ex1')

文件“ C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ spyder_kernels \ customize \ spydercustomize.py”,行文件中的第827行     execfile(文件名,命名空间)

execfile中的文件“ C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ spyder_kernels \ customize \ spydercustomize.py”,第110行     exec(compile(f.read(),文件名,'exec'),命名空间)

文件“ C:/Users/Administrador/Desktop/Pre-Try/Ex1/Ex1.py”,第46行,在     wb.save(“ Ex1.xlsx”)

文件“ C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ openpyxl \ workbook \ workbook.py”,保存中的第397行     save_workbook(自己,文件名)

save_workbook中的文件“ C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ openpyxl \ writer \ excel.py”,第294行     writer.save()

文件“ C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ openpyxl \ writer \ excel.py”,保存在第276行     self.write_data()

write_data中的文件“ C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ openpyxl \ writer \ excel.py”,第76行     self._write_worksheets()

文件_write_worksheets中的文件“ C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ openpyxl \ writer \ excel.py”,第219行     self._write_drawing(ws._drawing)

文件_write_drawing中的文件“ C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ openpyxl \ writer \ excel.py”,第142行     self._archive.writestr(drawing.path [1:],tostring(drawing._write()))

文件“ C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ openpyxl \ drawing \ spreadsheet_drawing.py”,第296行,_write     self._rels.append(rel)

UnboundLocalError:分配前已引用局部变量“ rel”

我不太了解这个错误。如果可以的话,将不胜感激!

1 个答案:

答案 0 :(得分:0)

chart2 = ChartContainer(autoTitleDeleted = 1) 这就是问题所在:您必须使用openpyxl图表对象,以便库可以管理对象之间的管道:图表是非常复杂的对象,我们尝试隐藏一些复杂性您的想法是正确的-将值设置为True-但这是成功的之所以不能这样工作,是因为ChartContainer不知道如何将自己添加到XLSX软件包中。

作为解决方法,最简单的方法是创建一个带有空字符串的标题。否则,您可以提交PR,该PR允许将autoTitleDeleted属性从chartContainers映射到图表,反之亦然。