news 2026/5/12 21:56:17

如何创建自定义 Matplotlib 主题,并让您的图表从无聊变得精彩

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何创建自定义 Matplotlib 主题,并让您的图表从无聊变得精彩

原文:towardsdatascience.com/how-to-create-a-custom-matplotlib-theme-and-make-your-charts-go-from-boring-to-amazing-bb2998945c8f

每个 Matplotlib 图表都有可能走红。但不是使用默认主题。

让我们坦诚地说:默认样式不会阻止任何人停下来。如果您想让读者注意,您需要的不仅仅是分辨率提升或新字体。您需要一个自定义主题。

这是让您的图表看起来像您自己的唯一方法。这是让您的读者停止滚动查看的唯一方法。好消息是?Matplotlib 使从头开始编写自定义样式表变得极其简单。更好的是——您可以让您的自定义主题在系统范围内可用!

在今天的文章中,您将学习如何做到这一点。

您需要用于绘制条形图和折线图的两个函数

为了可重复性,我将为您提供两个用于绘制条形图和折线图的函数。

设置自定义 Matplotlib 主题的目标不是改变底层 Python 代码——而是让它保持原样——并看看视觉上的差异。

这里是您需要跟踪的库:

importnumpyasnpimportmatplotlibasmplimportmatplotlib.pyplotasplt

让我们来看看这两个函数。

条形图

plot_bar()函数创建了一个堆叠条形图,表示每个地点和部门的员工数量。

数据完全是虚构的,唯一“硬编码”的部分是标题的y位置。它略微增加,以在标题和绘图之间创造更多空间。

在调用此函数时,您可以调整legend_pos值。我故意使这部分可调整,以便您可以调整图例的偏移量。它总是会有所不同,所以有一些灵活性是很好的。

其他一切都是相当简约且不言自明的:

defplot_bar(legend_pos:tuple=(1.25,1)):x=np.array(["New York","San Francisco","Los Angeles","Chicago","Miami"])y1=np.array([50,63,40,68,35])y2=np.array([77,85,62,89,58])y3=np.array([50,35,79,43,67])y4=np.array([59,62,33,77,72])plt.bar(x,y1,label="HR")plt.bar(x,y2,bottom=y1,label="Engineering")plt.bar(x,y3,bottom=y1+y2,label="Marketing")plt.bar(x,y4,bottom=y1+y2+y3,label="Sales")plt.title("Employee Count Per Location And Department",y=1.06)plt.xlabel("Office Location")plt.ylabel("Count")plt.legend(bbox_to_anchor=legend_pos)plt.show()

折线图

plot_line()函数与它非常相似,但它显示了虚构的年度收入。

换句话说,它显示了从 2018 年到 2023 年每个办公地点产生的收入折线图:

defplot_line(legend_pos:tuple=(1.25,1)):x=[2018,2019,2020,2021,2023]ny=[100,124,154,133,167]sf=[89,95,109,139,155]la=[107,144,179,161,175]ch=[59,91,99,117,141]mi=[121,99,104,131,140]plt.plot(x,ny,label="New York")plt.plot(x,sf,label="San Francisco")plt.plot(x,la,label="Los Angeles")plt.plot(x,ch,label="Chicago")plt.plot(x,mi,label="Miami")plt.title("Yearly Revenue",y=1.06)plt.xlabel("Year")plt.ylabel("Revenue (M)")plt.legend(bbox_to_anchor=legend_pos)plt.show()

那么,这些图表默认看起来如何?

一个看起来糟糕的例子

正如标题所暗示的那样——糟糕。我的确是指糟糕。

您亲自看看,如果出现重叠,可以随意调整图例偏移量:

plot_bar(legend_pos=(1.32,1))plot_line(legend_pos=(1.05,1))

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/d7b5131ed0ec64dbb08c08964bc6f50b.png

图片 1 – 丑陋的条形图(图片由作者提供)

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/360fb687c6b4b487ec1a5e02f8a7b57d.png

图片 2 – 丑陋的折线图(图片由作者提供)

字体一般,颜色无聊,分辨率不合理低。

您不希望与您的同事分享,更不用说与您的老板分享了。自定义主题可以解决上述所有问题,甚至更多。

Matplotlib 样式表 – 如何创建自定义 Matplotlib 主题

首先,创建一个以.mplstyle扩展名的文件。我将其命名为custom.mplstyle

在此文件中,您可以调整所有与 Matplotlib 相关的内容(实际上是一切)。我会保持简单,并更改一些将产生巨大差异的事情:

  • 通用调整– 默认图形大小和分辨率,调色板(Tableau 颜色盲调色板),以及绘图边框。

  • 文本– 自定义字体(必须在您的系统上安装),字体大小,标题位置和样式,以及轴标签/刻度的尺寸。

  • 图例– 位置和表示单个项目的数据点数量。

  • 网格– 总是显示图表内容后面的浅灰色虚线。

  • 图表类型特定调整– 折线图中线的默认宽度,以及包括标记。

将以下内容粘贴到您的.mplstyle文件中:

# Generic figure tweaksfigure.figsize:10,6figure.dpi:125savefig.dpi:300savefig.bbox:tight axes.prop_cycle:cycler("color",["006ba4","ff800e","ababab","595959","5f9ed1","c85200","898989","a2c8ec","ffbc79","cfcfcf"])axes.spines.top:Falseaxes.spines.right:False# Textfont.size:14font.family:sans-serif font.sans-serif:IBM Plex Sans axes.titlesize:20axes.titleweight:bold axes.titlelocation:left axes.labelsize:large xtick.labelsize:medium ytick.labelsize:medium# Legendlegend.loc:"upper right"legend.numpoints:3legend.scatterpoints:3# Gridaxes.grid:Trueaxes.axisbelow:Truegrid.color:"#d3d3d3"grid.linestyle::grid.linewidth:1.0# Line chart onlylines.linewidth:3lines.marker:o lines.markersize:8

那么,您如何在 Python 中引用此文件?

一个看起来很棒的例子

您只需添加一行代码即可使用您的自定义主题:

您只需添加一行代码即可使用您的自定义主题:

plt.style.use("custom.mplstyle")

做这件事的一个典型位置是在导入 Matplotlib 之后。这不是强制性的,只是最佳实践。

这就是您的图表现在将看起来像什么:

plot_bar()plot_line()

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/2954f8323e9940d7a1df48547236f532.png

图像 3 – 精美的条形图(作者图片)

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5b090de3412724cadffbed306aa2a33f.png

图像 4 – 精美的折线图(作者图片)

相同的代码,但视觉效果差异天差地别,至少可以说。

如何使您的自定义 Matplotlib 主题全局可用

mplstyle文件带到每个新项目中并不是什么大麻烦,但您可以做得更好。

“更好”的意思是使自定义样式表全局可用,或者至少在虚拟环境中可用。

首先,找出 Matplotlib 的安装位置:

mpl.__file__

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c92224d8e441b10d19b6f7137fd25fd4.png

图像 5 – 环境特定的 Matplotlib 位置

您需要整个路径,但不包括__init__.py部分。

假设您在笔记本环境中,运行以下命令(在替换路径后)将mplstyle文件复制到 Matplotlib 的样式库目录:

!cp custom.mplstyle/Users/dradecic/miniforge3/envs/py/lib/python3.11/site-packages/matplotlib/mpl-data/stylelib/custom-style.mplstyle

注意,我已经重命名了文件。

如果您不在笔记本环境中,只需省略开头的感叹号,然后从控制台运行该命令。

无论怎样,在重启内核后,您应该会看到您的样式表列在列表中:

importmatplotlib.pyplotasplt plt.style.available

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/b3df976a13ab1617f1127ea70aae41b5.png

图像 6 – 可用的 Matplotlib 主题(作者图片)

你现在可以从任何在虚拟环境中运行的脚本或笔记本中引用它:

plt.style.use("custom-style")

为了演示,我在另一个笔记本中创建了一个新的图表。它显示的数据是完全随机的。

重要的是自定义主题能够正常工作:

importmatplotlib.pyplotasplt plt.style.use("custom-style")x=[2019,2020,2021,2022,2023,2024]plt.plot(x,[100,125,200,150,225,250])plt.plot(x,[150,220,250,300,200,150])plt.plot(x,[200,150,275,175,250,300])plt.title("Custom Styles Demonstration Chart",y=1.06)plt.show()

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/b9547d3757607756f790f865b39a6b90.png

图像 7 – 测试图表(作者提供)

就这样 – 只需一行代码就可以实现完全自定义的视觉风格。

总结

总结来说,默认的数据可视化主题很糟糕。

你应该尽你所能让你的视觉作品脱颖而出并吸引注意。如果你做不到这一点,你的信息质量将不再重要。没有人会多看一眼。没有人会分享它。

在 Matplotlib 中使用自定义样式表是吸引注意力的好方法。

你只需编写一次主题,然后通过一行额外的代码在任何地方使用它。这比将数十个rcParams粘贴到每个 Python 脚本或笔记本中要少得多摩擦。

你通常在你的可视化中包含哪些样式调整?在下面的评论部分告诉我。


想要提升你的数据可视化技能?加入我的 Substack,与成千上万志同道合的人一起获取专家建议和独家内容。

使用 Python 进行数据涂鸦 | 达里奥·拉代奇 | Substack

最初发布于darioradecic.substack.com

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 4:23:42

户外LED显示屏安装前期风载与防水考量深度解析

户外LED显示屏安装前期风载与防水考量深度解析城市街头、高速路旁、商业广场——如今,户外LED显示屏早已成为我们生活中不可或缺的信息窗口。无论是广告投放、交通引导还是公共信息发布,这些“发光的幕墙”以其高亮度、强可视性赢得了广泛应用。然而&…

作者头像 李华
网站建设 2026/5/2 13:27:41

抖音无水印下载神器:3步搞定高清视频永久保存

抖音无水印下载神器:3步搞定高清视频永久保存 【免费下载链接】douyin_downloader 抖音短视频无水印下载 win编译版本下载:https://www.lanzous.com/i9za5od 项目地址: https://gitcode.com/gh_mirrors/dou/douyin_downloader 还在为抖音精彩视频…

作者头像 李华
网站建设 2026/5/9 7:17:07

8 个降AI率工具,研究生必备!

8 个降AI率工具,研究生必备! AI降重工具,论文写作的“隐形助手” 在当今学术研究日益依赖人工智能的时代,研究生们在撰写论文时常常面临一个棘手的问题:如何在保持原有语义和逻辑的基础上,有效降低AIGC率、…

作者头像 李华
网站建设 2026/5/11 20:30:50

从下载到激活:Multisim14.3教学环境安装全记录

从下载到激活:Multisim14.3教学环境安装全记录(优化润色版) 当你在实验室卡在“许可证错误”时,到底发生了什么? 作为一名常年负责电子类课程实验平台搭建的工程师,我见过太多学生抱着笔记本跑来求助&…

作者头像 李华
网站建设 2026/5/2 12:07:51

基于Keil的STM32实时变量监控:图解说明方法

Keil调试实战:手把手教你实时监控STM32变量,告别“打印式”调试你有没有过这样的经历?为了查一个ADC采样异常,反复在代码里加printf,改完编译下载运行,结果串口输出还把系统时序打乱了。等终于发现问题&…

作者头像 李华
网站建设 2026/5/11 20:35:57

告别传统照明痛点,安科瑞智能系统开启智慧控光新时代

唐雪阳 安科瑞电气股份有限公司 上海嘉定 201801 摘要:随着物联网、大数据技术与“双碳”战略的深度融合,传统照明系统在能耗管理、控制灵活性及运维效率上的局限性日益凸显。智能照明作为建筑电气自动化与绿色节能的关键环节,已成为现代楼…

作者头像 李华