当前位置: 首页 > news >正文

如何创建自定义 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

http://www.jsqmd.com/news/125794/

相关文章:

  • Packet Tracer官网下载后的更新与升级方法
  • 抖音下载工具无水印终极指南:实用技巧与高效方法
  • LangFlow JSON解析器节点应用实例:提取结构化结果
  • 智能机器狗项目开发中的问题记录
  • 新手教程:手把手教你掌握DRC基本概念与使用场景
  • 如何在 Matplotlib 中创建自定义颜色调色板 – 离散与线性颜色映射,解释说明
  • 2025年年终成都四川工作服厂家推荐:聚焦大型企业集团采购需求,专家严选5家优质供应商案例盘点 - 品牌推荐
  • 如何在数据科学职位申请中创造机会并获得成功
  • IDA Pro下载安装(macOS):图解说明每一步操作
  • Arduino IDE读取心率传感器数据的核心要点
  • 如何创建样式优美的 Streamlit Dataframes,第二部分:使用 AgGrid
  • LangFlow营养饮食搭配推荐系统设计
  • 如何创建优雅的 Streamlit 数据框,第一部分:使用 Pandas Styler
  • 基于IAR安装的实时控制程序部署:项目应用
  • LangFlow市场调研报告自动生成系统构想
  • LangFlow漏洞检测提示工程应用探索
  • 抖音无水印下载神器:3步搞定高清视频永久保存
  • LangFlow农业病虫害识别指导系统原型
  • Topit窗口置顶工具:5分钟学会让Mac窗口永远浮在最上层
  • LangFlow远程医疗问诊前置筛查工具
  • MDK实现Modbus RTU通信操作指南
  • 如何使用卫星图像创建你自己的 CV 数据集:来自太空的野火
  • 谷歌闪电突袭:Gemini 3免费开放引爆AI革命
  • 基于NX的智能制造解决方案:深度剖析
  • LangFlow代码生成辅助工具实战搭建
  • USB3.0引脚定义与连接器选型配合要点通俗解释
  • LangFlow轻量化部署技巧:减少资源消耗提升响应速度
  • EMI抑制在高速电路板PCB中的实践方法
  • macOS窗口管理革命:Topit置顶工具的7种高效工作流配置
  • Mac窗口管理革命:Topit如何彻底改变你的多任务工作方式