3 个关键让你的 Matplotlib 图表高效发布

news2024/9/21 3:33:30

文章缩略图(作者提供的图片)

数据可视化比查看原始数字数据提供了更深刻的见解。

然而,创建吸引人的图表需要时间和精力。Matplotlib 是 Python 中数据可视化的事实标准库。它很简单,已经使用了几十年,而且你正在寻找的任何东西都可以通过一次网络搜索找到。

但事情并非总是那么美好。默认情况下,Matplotlib 可视化效果看起来很糟糕,作为一名数据专业人员,您必须进行许多调整才能获得可用的东西。今天这篇文章的目标就是让您达到这个目的。

最后,你将得到一个可以粘贴到任何 Jupyter Notebook 的代码片段。

Matplotlib 的默认样式有什么问题?

您无需下载任何数据集即可继续操作。您将创建一个具有增加趋势和可重复季节性模式的合成时间序列数据集:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt


# Single season multiplier factors - for seasonality effect
seasonal_multipliers = [1.1, 1.3, 1.2, 1.5, 1.9, 2.3, 2.1, 2.8, 2.0, 1.7, 1.5, 1.2]
# Immitate 10 years of data
xs = np.arange(1, 121)

time_series = []
# Split to 10 chunks - 1 year each
for chunk in np.split(xs, 10):
    for i, val in enumerate(chunk):
        # Multiply value with seasonal scalar
        time_series.append(float(val * seasonal_multipliers[i]))

x = pd.date_range(start="2015-01-01", freq="MS", periods=120)
y = time_series      

print(x[-10:])
print(y[-10:])

图片 1 — 时间序列数据(作者提供)

由于dataset具有日期作为索引,并且具有浮点值作为唯一属性,因此您可以直接通过以下方式绘制整个内容plt.plot()

plt.figure(figsize=(9, 6))
plt.plot(x, y)
plt.show()

图片 2 — 默认 matplotlib 图表(作者提供)

它的一切都彰显着 2002 年的风格。低分辨率。周围的框。字体大小。

没有什么是只需稍加调整就能解决的。

调整#1 - 调整 rcParams 以设置整体主题

手动调整每个图表肯定会浪费你的时间。

毕竟,您制作的大多数图表都会有一个底层主题。声明一次并在任何地方重复使用它是有意义的。这就是 的作用rcParams

以下代码片段更改了其中的一大堆内容,并确保您的图表呈现为 SVG。如果您明确将图表保存到磁盘,最后一点并不重要,但在笔记本环境中,它将产生巨大的差异:

import matplotlib_inline
matplotlib_inline.backend_inline.set_matplotlib_formats("svg")

plt.rcParams.update({
    "figure.figsize": (9, 6),
    "axes.spines.top": False,
    "axes.spines.right": False,
    "font.size": 14,
    "figure.titlesize": "xx-large",
    "xtick.labelsize": "medium",
    "ytick.labelsize": "medium",
    "axes.axisbelow": True
})

现在,当您重复调用时plt.plot(),图表将看起来比较美观:

plt.plot(x, y)
plt.title("Sales Over Time")
plt.xlabel("Time Period")
plt.ylabel("Sales in 000")
plt.show()

图片 3 — 调整图表主题(图片来自作者)

还没有完全实现,但这个想法只是为了设置一个基本主题。您不应该在 中包含特定于图表的说明rcParams

调整 #2 — 将字体带入 21 世纪

您可以改变的另一件事rcParams是字体。

你可以从互联网上下载任何 TTF 字体,然后通过 Matplotlib 加载它font_manager。我将使用Roboto Condensed,但你可以随意选择你喜欢的任何字体:

import matplotlib.font_manager as font_manager

font_dir = ["/path/to/Roboto_Condensed"]
for font in font_manager.findSystemFonts(font_dir):
    font_manager.fontManager.addfont(font)

plt.rcParams.update({
    "font.family": "Roboto Condensed"
})

要验证字体是否已更改,只需重新运行之前的绘图片段:

plt.plot(x, y)
plt.title("Sales Over Time")
plt.xlabel("Time Period")
plt.ylabel("Sales in 000")
plt.show()

图片 4 — 更改字体(图片来自作者)

这就是我们要讨论的有关整体主题变化的全部内容。接下来,让我们具体讨论一下。

调整#3 — 针对您的图表类型进行微调

在进行微调时,不同的图表类型会有不同的采用方法。

对于折线图,您可以更改线条颜色和宽度,甚至可以添加填充区域部分以使图表看起来更像仪表板。

以下代码片段中所做的其他更改纯粹是外观上的——标题位置和 y 轴限制:

# 1. Line color and width
plt.plot(x, y, color="#1C3041", linewidth=2)
# 2. Add shaded area below the line
plt.fill_between(x, y, color="#1C3041", alpha=0.3)
# 3. Change title location and font weight
plt.title("Sales Over Time", loc="left", fontdict={"weight": "bold"}, y=1.06)

plt.xlabel("Time Period")
plt.ylabel("Sales in 000")
plt.show()

图片 5 — 最终图表(作者提供)

现在,这几乎是一个可以发布的可视化了!

一些具体的事情会产生很大的不同,但是如果没有打下坚实的基础,这是不可能的。

总结

许多数据专业人员完全忽视 Matplotlib,因为它的默认外观。

他们认为“这太模糊了,太糟糕了,我不能把这样的视觉效果发给我的老板。”事实与事实相差甚远。你可以更改一堆参数,最终得到一个可以随处携带的代码块——可以带到每个脚本、笔记本和环境中。

我鼓励您尝试各种参数来进一步个性化整体外观和感觉,并在下面的评论部分分享您的偏好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1994383.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字IC验证基础知识

1. 形式验证 利用数学分析的方式,对设计的状态空间进行穷举分析的验证,数据静态验证,不需要灌注激励,对设计进行检查; 参考: Formal Verification (一) 形式验证的分类、发展、适用场景

在 Django 表单中传递自定义表单值到视图

在Django中,我们可以通过表单的初始化参数initial来传递自定义的初始值给表单字段。如果我们想要在视图中设置表单的初始值,可以在视图中创建表单的实例时,传递一个字典给initial参数。 1、问题背景 我们遇到了这样一个问题:在使…

安卓默认混淆规则文件的区别

在 Android 项目中,ProGuard 是一个优化和混淆代码的工具。proguard-android-optimize.txt 和 proguard-android.txt 是两个用于配置 ProGuard 的默认规则文件,如图下 它们有以下区别: proguard-android-optimize.txt: 优化:这个配…

基于Hadoop的北京市二手房价数据分析与可视化

文章目录 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主项目介绍总结每文 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主 项目介绍 随着中国经济的快速发展和城市化进程的加速,房地产市场已成为国民经…

基于Java中的SSM框架实现在线网上书店系统项目【项目源码+论文说明】

基于Java中的SSM框架实现在线网上书店系统演示 摘要 本文介绍了利用JSP技术实现动态网上书店的发展概况、技术特点、应用原理和方法,充分突出了JSP技术的优越性。 本文简要论述了电子商务的优势、对社会的影响以及建立电子商务网站应注意的问题,并介绍了…

喜报|热烈祝贺超维WO—100室外轮式巡检机器人取得中国电力科学研究院产品检测合格证书

近日,超维WO—100室外轮式巡检机器人顺利通过中国电力科学研究院(武汉高压研究所)的资料审查、测试、及综合评估,并取得产品检测合格证书! 中国电力科学研究院是中国最权威的实验室认可机构,其认证结果得到…

代码随想录——判断子序列(Leetcode 392)

题目链接 双指针 思路: 初始化两个指针 i 和 j,分别指向 s 和 t 的初始位置。每次贪心地匹配,匹配成功则 i 和 j 同时右移,匹配 s 的下一个位置,匹配失败则 j 右移,i 不变,尝试用 t 的下一个字…

《Techporters架构搭建》-Day04 基础架构

功能权限代码 从代码分层开始分层设计是什么?有什么好处?分层设计带来的好处项目分层的目的阿里分层建议DDD分层 代码编写实体类Mapper层结构设计 Service层结构设计 Controller层结构设计 规范及设计遵循Restful API遵循领域模型规约对象拷贝统一接口返…

H20 GPU算力评估分析

H20算力秘密: GPU算力评估 一、从H20谈起 NVIDIA国内热销H20显卡,TFLOPS达标,却声称能媲美A800/A100,究竟凭何底气?揭秘其背后的性能奥秘。 看下表: H20的FP16 TFLOPS为148,虽不及A800的312,但…

Pandas DataFrame 多条件索引

问题背景 在数据分析和处理中,经常需要根据特定条件过滤数据,以提取感兴趣的信息。Pandas DataFrame 提供了多种灵活的方式来索引数据,其中一种是使用多条件索引,它允许使用逻辑条件组合来选择满足所有条件的行。 解决方案 可以…

Web开发-CSS篇-上

CSS的发展历史 CSS(层叠样式表)最初由万维网联盟(W3C)于1996年发布。CSS1是最早的版本,它为网页设计提供了基本的样式功能,如字体、颜色和间距。随着互联网的发展,CSS也不断演进: C…

AI人工智能 强化学习

AI人工智能 强化学习基础 强化学习基础 这种类型的学习被用来加强或加强基于评论者信息的网络。 也就是说,在强化学习下训练的网络从环境中获得一些反馈。 但是,反馈是评价性的,并且不像监督式学习的情况那样具有启发性。 基于这种反馈&…

Python自动化水印处理:让你的图像版权保护更高效

在这个数字化时代,图像和照片已成为我们日常生活和工作中的重要组成部分。然而,随着互联网的普及,版权保护变得越来越具有挑战性。 在这个数字化时代,图像和照片已成为我们日常生活和工作中的重要组成部分。然而,随着…

在线音频剪辑免费工具哪个好用?推荐这6款新手必备的工具

在这个声音无处不在的时代,音频剪辑不仅是专业音乐人的专利,更是每个新媒体运营者不可或缺的利器。 无论是制作引人入胜的短视频背景音乐,还是编辑动人心弦的播客内容,一款强大的音频剪辑工具都能让你的作品如虎添翼。 今天&…

Linux系统之ls命令的基本使用

Linux系统之ls命令的基本使用 一、ls命令介绍二、ls命令的使用帮助2.1 命令格式2.2 命令选项2.3 使用帮助 三、ls命令的基本使用3.1 列出当前目录中的所有文件和目录3.2 列出指定目录中的所有文件和目录3.3 显示文件的详细信息3.4 列出所有文件和目录3.5 显示目录本身&#xff…

临床必备!常用的营养评估量表分享,附操作步骤与评分标准

常笑医学整理了3个临床常用的营养评估量表,支持下载和在线使用,供临床医护工作人员参考。 01 营养风险筛查评分简表 (完整量表请点击量表名称查看) NRS2002(Nutrition Risk Screening 2002, NRS2002)是欧洲…

嵌入式学习笔记十三——C语言指针变量、一维数组的指针、快速排序

指针变量 指针初始化 指针变量初始化:如果没有初始化,指针是随机值,既野指针。初始化可以让指针变量有明确的指向。 int a 10;int *p &a;//指针初始化int *p NULL; //NULL 0号地址 --- 空指针 指针赋值 int * p;p NULL;int a;i…

【机器学习西瓜书学习笔记——特征选择与稀疏学习】

机器学习西瓜书学习笔记【第十一章】 第十一章 特征选择与稀疏学习11.1子集搜索与评价特征特征选择为什么要特征选择如何进行特征选择子集搜索子集评价 11.2过滤式选择Relief适用场景如何确定相关统计量 11.3包裹式选择优缺点 11.4嵌入式选择与L1正则化L1/L2正则化L1正则化问题…

【微信小程序开发】——奶茶点餐小程序的制作(一)

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

Nginx+Tomcat负载均衡、动静分离群集(群集)

实验主机:101 102 103 101:nginx 102:tomcat1 103:tomcat2 先配置两个tomcat服务器 拉进去所需的安装包; 同步会话开始搭建; 安装编译环境; 解压并移动到方便管理的地方; 然后在root的家目录下创建一个目录及测试…