openpyxl修改图表中纯色填充的透明度和颜色

本文介绍了如何使用openpyxl库在Python中修改Excel图表的颜色和透明度。通过自定义类MyRGBColor和MyColorChoice,不仅可以更改颜色,还能设置线条和填充的透明度。示例代码展示了如何应用于折线图和面积图,适用于需要调整图表视觉效果的场景。
摘要由CSDN通过智能技术生成

如果只修改颜色的话,直接使用下面的代码即可:

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可以直接改颜色,但不能修改透明度)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值