news 2026/4/18 8:20:49

如何创建自定义 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/18 5:28:01

STM32CubeMX无法打开:新手教程之Windows权限设置

STM32CubeMX打不开?别急,可能是Windows权限在“拦路”你是不是也遇到过这种情况:刚装好STM32CubeMX,满怀期待地双击图标,结果——程序图标闪了一下就没了,任务管理器里连个影子都找不到。或者弹出一个黑框&…

作者头像 李华
网站建设 2026/4/15 20:23:22

从单点充电到全域智控:安科瑞重塑新能源充电生态

唐雪阳安科瑞电气股份有限公司 上海嘉定 201801在双碳目标下,新能源汽车普及浪潮席卷而来,充电桩作为产业链关键基础设施,正迎来“量质齐升”的发展机遇。站在企业的角度,除了要主动承担碳达峰、碳中和的社会责任,也需…

作者头像 李华
网站建设 2026/3/20 9:34:06

LangFlow市场调研报告自动生成系统构想

LangFlow市场调研报告自动生成系统构想 在企业决策日益依赖数据洞察的今天,市场调研报告已成为战略制定的核心依据。然而,传统报告撰写过程耗时长、人力成本高,且难以快速响应动态变化的市场需求。一个典型的市场分析任务可能需要数天时间&am…

作者头像 李华
网站建设 2026/4/17 17:09:29

LangFlow轻量化部署技巧:减少资源消耗提升响应速度

LangFlow轻量化部署实践:如何在有限资源下构建高效AI工作流 在AI应用开发日益普及的今天,一个常见的困境是:团队需要快速验证大模型在业务场景中的可行性,但传统基于代码的开发方式周期长、协作难,而直接使用官方工具镜…

作者头像 李华
网站建设 2026/4/18 8:15:39

Proteus 8.0汉化包使用指南:超详细版配置流程说明

让 Proteus 说中文:手把手教你安全、稳定完成 8.0 版本汉化你是不是也曾在打开 Proteus 的那一刻,面对满屏英文菜单和对话框感到头大?尤其是刚接触电路仿真时,“Run Simulation”、“Component Mode”这些术语还得边查字典边操作&…

作者头像 李华