openpyxl chart에서 그래프 테두리 지우기
openpyxl chart에서 그래프 테두리 지우기
openpyxl은 편리한 라이브러리로 Excel 그래프도 자동으로 만들 수 있습니다.
많은 데이터에서 비슷한 많은 그래프를 만드는 경우 등, 엑셀로 뽀찌뽀찌와 클릭을 원하지 않을 때 매우 편리합니다.
편리합니다만, 그래프의 테두리를 지우거나 배경을 바꾸는 것이 잘 할 수 없었으므로, 조사해 보았습니다.
먼저 그래프 만들기
원형 차트를 표시해 봅니다.
import openpyxl
from openpyxl.chart import PieChart, Reference
wb = openpyxl.Workbook()
ws = wb.active
ws["A1"] = "りんご"
ws["B1"] = 30
ws["A2"] = "みかん"
ws["B2"] = 60
chart = PieChart()
chart.add_data(Reference(ws, min_col=2, min_row=1, max_row=2))
chart.set_categories(Reference(ws, min_col=1, min_row=1, max_row=2))
ws.add_chart(chart, "B4")
wb.save("out.xlsx")
이런 식으로 되었습니다.
이 화살표에서 테두리를 지우거나이 테두리 안쪽을 채우는 것이 목표입니다.
테두리 안을 채워 보자
조금 조사하면 plot_area
의 graphicalProperties
라는 것을 설정하면 좋다고 합니다.
이해하기 쉽도록 빨간색으로 바릅니다.
from openpyxl.chart.shapes import GraphicalProperties
...
chart.plot_area.graphicalProperties = GraphicalProperties(solidFill="cc0000")
음, 생각했던 범위와 다릅니다.
legend
라고 하는 것도 있습니다만, 이것은, 다른 생각이 듭니다.
뭐, 일단 해 봅시다.
녹색으로 시도합니다.
chart.legend.graphicalProperties = GraphicalProperties(solidFill="00cc00")
음, 맞습니다.
legend는 거기요.
조금 더 살펴보면,chart.graphical_properties
라는 것이 있는 것 같습니다.
Camel Case가 아니라 Snake Case입니다.
시도해 봅시다.
chart.graphical_properties = GraphicalProperties(solidFill="0000cc")
음. 안돼. 변화 없음.
검색해 보면, 움직이지 않거나, 낡은 버젼에서는 움직였다든가 몇가지 싫은 정보가 있습니다.
조사
그래서 소스를 살펴 보겠습니다.
PieChart
는 _PieChartBase
를 상속하고 _PieChartBase
는 ChartBase
를 상속하고 이 ChartBase
에 graphical_properties
가 정의되어 있습니다.
site-packages/openpyxl/chart/_chart.pyclass ChartBase(Serialisable):
....
graphical_properties = Typed(expected_type=GraphicalProperties, allow_none=True)
하지만, 잘 소스를 쫓아 보면, graphical_properties는 __init__
로 None에 초기화되고 있는 것만으로 어디에서도 참조되고 있지 않습니다.
이것은 도대체 무슨 일일까요?
_write
함수에 있는 ChartSpace
의 spPr
가 GraphicalProperties
를 가지는 것 같습니다.
site-packages/openpyxl/chart/_chart.pyclass ChartBase(Serialisable):
....
def _write(self):
....
cs = ChartSpace(chart=container)
cs.style = self.style
cs.roundedCorners = self.roundedCorners
cs.pivotSource = self.pivotSource
cs.spPr = self.graphical_properties <== この行を追加
return cs.to_tree()
할 수 있었습니다! ! !
뭐야? 버그입니까?
드디어 테두리 지우기
여기까지 할 수 있으면, 본제의 테두리를 지우는 것을 해 봅시다.
이런 코드가 되었습니다.
import openpyxl
from openpyxl.chart import PieChart, Reference
from openpyxl.chart.shapes import GraphicalProperties, LineProperties
wb = openpyxl.Workbook()
ws = wb.active
ws["A1"] = "りんご"
ws["B1"] = 30
ws["A2"] = "みかん"
ws["B2"] = 60
chart = PieChart()
chart.add_data(Reference(ws, min_col=2, min_row=1, max_row=2))
chart.set_categories(Reference(ws, min_col=1, min_row=1, max_row=2))
chart.graphical_properties = GraphicalProperties(ln=LineProperties(noFill=True))
ws.add_chart(chart, "B4")
wb.save("out.xlsx")
할 수 있었습니다! !
사이고에게
라이브러리를 직접 만났습니다만, 뭔가 그 밖에 잘 할 수 없겠지요.
또한 시간이 있을 때 도전해 봅시다.
Reference
이 문제에 관하여(openpyxl chart에서 그래프 테두리 지우기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hirachan/items/ff796319084f1107b820
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import openpyxl
from openpyxl.chart import PieChart, Reference
wb = openpyxl.Workbook()
ws = wb.active
ws["A1"] = "りんご"
ws["B1"] = 30
ws["A2"] = "みかん"
ws["B2"] = 60
chart = PieChart()
chart.add_data(Reference(ws, min_col=2, min_row=1, max_row=2))
chart.set_categories(Reference(ws, min_col=1, min_row=1, max_row=2))
ws.add_chart(chart, "B4")
wb.save("out.xlsx")
from openpyxl.chart.shapes import GraphicalProperties
...
chart.plot_area.graphicalProperties = GraphicalProperties(solidFill="cc0000")
chart.legend.graphicalProperties = GraphicalProperties(solidFill="00cc00")
chart.graphical_properties = GraphicalProperties(solidFill="0000cc")
class ChartBase(Serialisable):
....
graphical_properties = Typed(expected_type=GraphicalProperties, allow_none=True)
class ChartBase(Serialisable):
....
def _write(self):
....
cs = ChartSpace(chart=container)
cs.style = self.style
cs.roundedCorners = self.roundedCorners
cs.pivotSource = self.pivotSource
cs.spPr = self.graphical_properties <== この行を追加
return cs.to_tree()
import openpyxl
from openpyxl.chart import PieChart, Reference
from openpyxl.chart.shapes import GraphicalProperties, LineProperties
wb = openpyxl.Workbook()
ws = wb.active
ws["A1"] = "りんご"
ws["B1"] = 30
ws["A2"] = "みかん"
ws["B2"] = 60
chart = PieChart()
chart.add_data(Reference(ws, min_col=2, min_row=1, max_row=2))
chart.set_categories(Reference(ws, min_col=1, min_row=1, max_row=2))
chart.graphical_properties = GraphicalProperties(ln=LineProperties(noFill=True))
ws.add_chart(chart, "B4")
wb.save("out.xlsx")
Reference
이 문제에 관하여(openpyxl chart에서 그래프 테두리 지우기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hirachan/items/ff796319084f1107b820텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)