Удалить заголовок из ScatterChart - PullRequest
0 голосов
/ 28 мая 2019

Я хотел бы знать, как можно назначить имя только серии данных (используя диаграмму рассеяния), не получая того же имени серии, что и заголовок диаграммы. Я хотел бы получить только название серии в качестве легенды, а НЕ название диаграммы вообще.

Я понял, что 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') Traceback (последний вызов был последним):

Файл "", строка 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, в runfile execfile (имя файла, пространство имен)

Файл "C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ spyder_kernels \ customize \ spydercustomize.py", строка 110, в execfile exec (compile (f.read (), filename, '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 (self, filename)

Файл "C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ openpyxl \ writer \ excel.py", строка 294, в save_workbook writer.save ()

Файл "C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ openpyxl \ writer \ excel.py", строка 276, в сохранении self.write_data ()

Файл "C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ openpyxl \ writer \ excel.py", строка 76, в write_data self._write_worksheets ()

Файл "C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ openpyxl \ writer \ excel.py", строка 219, в _write_worksheets self._write_drawing (ws._drawing)

Файл "C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ openpyxl \ writer \ excel.py", строка 142, в _write_drawing 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 (отн)

UnboundLocalError: локальная переменная 'rel', на которую ссылается перед присваиванием`

Я не очень понимаю эту ошибку. Если бы вы могли помочь, был бы благодарен!

1 Ответ

1 голос
/ 28 мая 2019

chart2 = ChartContainer(autoTitleDeleted = 1) Вот в чем проблема: вы должны использовать объекты диаграмм openpyxl, чтобы библиотека могла управлять распределением между объектами: диаграммы - очень сложные объекты, и мы пытаемся скрыть некоторые сложности. Ваша идея верна - установить значение в True - но это выиграло не работает так, потому что ChartContainer не знает, как добавить себя в пакет XLSX.

В качестве обходного пути, вероятно, проще всего создать заголовок с пустой строкой. В противном случае вы можете отправить PR, который позволяет сопоставить атрибут autoTitleDeleted из chartContainers с диаграммами и наоборот.

...