如果只修改颜色的话,直接使用下面的代码即可:
from openpyxl.drawing.fill import ColorChoice
from openpyxl.drawing.line import LineProperties
'''将折线图的第一个系列的颜色设置为5FBEBF,宽度为2磅(w=25400)'''
chart.ser[0].spPr.ln = LineProperties(w=25400, solidFill = ColorChoice(srgbClr='5FBEBF'))
修改透明度就比较复杂一些,到写文章时(2021年7月),笔者还没有找到openpyxl官方的直接修改透明度的方法,但有幸找到下面的文章:
https://stackoverflow.com/questions/42950245/set-transparency-alpha-of-area-chart-openpyxl
参考大佬的做法(做了一点小修改),可以通过自定义类来改变纯色填充(solidFill)的透明度和颜色,对于面积图或者数量比较多的折线图尤为有效。
首先在代码的import部分粘贴以下内容:
from openpyxl.descriptors import Typed
from openpyxl.descriptors.serialisable import Serialisable
from openpyxl.descriptors.nested import NestedInteger
from openpyxl.xml.constants import DRAWING_NS
class MyRGBColor(Serialisable):
tagname = 'srgbClr'
namespace = DRAWING_NS
val = Typed(expected_type = str)
alpha = NestedInteger(allow_none=True)
__elements__ = ('alpha', )
def __init__(self, val, alpha=None):
self.val = val
self.alpha = alpha
class MyColorChoice(ColorChoice):
srgbClr = Typed(expected_type=MyRGBColor, allow_none=True)
然后就可以开始修改透明度和颜色了,假定你已经生成了一个面积图,命名为chart,那么可以使用下面的代码去修改透明度与颜色:
from openpyxl.drawing.fill import ColorChoice
from openpyxl.drawing.line import LineProperties
'''
下面这行中ser[0]是面积图(折线图同理)第一个系列的颜色与透明度
修改线条部分(ln)的颜色,宽度w设为25400即2磅
其中的'5FBEBF'即颜色的十六进制代码,可以自行用其他颜色代码替换,不了解的同学可以百度颜色转换器
alpha即【不透明度】(1000倍),0是完全透明,100000是完全不透明
'''
chart.ser[0].spPr.ln = LineProperties(w=25400, solidFill = MyColorChoice(srgbClr=MyRGBColor('5FBEBF', alpha=50000))
'''
然后修改面积图的颜色与透明度
'''
chart.ser[0].spPr.solidFill = MyColorChoice(srgbClr=MyRGBColor('5FBEBF', alpha=50000))
'''最后才是add_chart'''
ws.add_chart(chart, 'A1')
其余图表类型的修改方法是一样的,就是在solidFill中用MyColorChoice去替换原生的ColorChoice类,从而实现修改透明度。(ColorChoice可以直接改颜色,但不能修改透明度)