如何在matplotlib自定义.mplstyle样式中设置四条spines的默认颜色
结论
原生的.mplstyle配置文件不支持直接分别设置四条spine的默认颜色,因为Matplotlib官方提供的全局RC参数体系里,仅提供了axes.edgecolor这个统一控制所有边框颜色的配置,没有对应上、下、左、右四条边单独设置的内置参数。
可行替代方案
你可以通过以下两种方式实现「所有样式配置统一管理、业务脚本不出现样式代码」的需求:
方案1:把spine颜色配置写在mplstyle中,配合全局事件回调自动生效
你可以先在my_style.mplstyle中添加自定义的颜色配置项(Matplotlib支持自定义RC参数,只要命名不与内置参数冲突即可):
# my_style.mplstyle 追加内容 custom.spine.top.color: red custom.spine.right.color: blue custom.spine.bottom.color: green custom.spine.left.color: orange
然后封装一个单独的样式加载模块,比如load_my_style.py,在里面注册Axes创建的全局回调,自动读取配置设置spine颜色:
import matplotlib.pyplot as plt # 加载自定义样式 plt.style.use(r'libstyle/my_style.mplstyle') def auto_set_spine_colors(event): ax = event.axes # 读取样式文件里的自定义配置设置边框颜色 ax.spines['top'].set_color(plt.rcParams['custom.spine.top.color']) ax.spines['right'].set_color(plt.rcParams['custom.spine.right.color']) ax.spines['bottom'].set_color(plt.rcParams['custom.spine.bottom.color']) ax.spines['left'].set_color(plt.rcParams['custom.spine.left.color']) # 注册全局回调,所有新创建的Axes都会自动执行上面的设置 plt.rcParams['figure.hooks'] = plt.rcParams['figure.hooks'] + [ lambda fig: fig.canvas.mpl_connect('axes_added', auto_set_spine_colors) ]
后续业务脚本里只要导入这个模块即可,不需要额外写任何样式相关代码:
import load_my_style import matplotlib.pyplot as plt # 后续画图逻辑,生成的图都会自动应用自定义的spine颜色 fig, ax = plt.subplots() plt.show()
方案2:直接在封装模块里写死spine颜色
如果不需要经常修改spine颜色,也可以直接把spine颜色的设置逻辑写在样式加载模块里,不用额外在mplstyle中加自定义参数,维护起来更简单。
内容的提问来源于stack exchange,提问作者Zephyr
相关产品推荐
相关产品推荐

