news 2026/4/22 23:26:54

如何创建自定义 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/4/16 5:02:06

全自研仿真GPU求解器x虚实对标物理测量工厂,打造具身合成数据SuperApp,加速具身仿真生态丨光轮智能@MEET2026

编辑部 整理自 MEET2026量子位 | 公众号 QbitAI从大模型智能的“语言世界”迈向具身智能的“物理世界”,仿真正在成为连接落地的底层基础设施。在本次量子位MEET2026智能未来大会上,光轮智能联合创始人兼总裁杨海波给出了他的观察:具身智能的…

作者头像 李华
网站建设 2026/4/15 17:50:10

达梦数据库备份还原

目录 一、 核心架构:达梦备份还原全景图 二、 基石配置:开启归档模式全流程 2.1 归档模式的重要性 2.2 开启归档实战步骤 三、 备份实战:多种场景详细操作 3.1 联机全量备份(生产环境首选) 3.2 增量备份策略 3.…

作者头像 李华
网站建设 2026/4/19 9:43:49

如何在数据科学职位申请中创造机会并获得成功

原文:towardsdatascience.com/how-to-create-opportunities-and-succeed-in-data-science-job-applications-3881a5c86508?sourcecollection_archive---------7-----------------------#2024-10-29 我从成功与失败中汲取的宝贵经验,将帮助你在职业道路上…

作者头像 李华
网站建设 2026/4/19 9:00:52

LangFlow条件判断节点使用方法:实现智能路由逻辑

LangFlow条件判断节点使用方法:实现智能路由逻辑 在构建大语言模型(LLM)驱动的应用时,一个常见的挑战是:如何让系统“听懂”用户的意图,并据此做出不同响应?比如,用户问的是退货政策…

作者头像 李华
网站建设 2026/4/20 8:14:07

ModbusTCP报文格式说明:图解入门与实例演示

深入理解 Modbus TCP 报文结构:从零开始的实战解析 在工业自动化和物联网系统中,设备之间的通信是系统的“神经系统”。而在这条神经网络中, Modbus TCP 是最常见、最可靠的一种协议之一。它简洁、开放、易于实现,被广泛应用于 …

作者头像 李华