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

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

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

然而,创建吸引人的图表需要时间和精力。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,因为它的默认外观。

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

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

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目:使用AngularJs编写的简单 益智游戏(附源代码)  这是一个简单的 javascript 项目。这是一个拼图游戏,也包含一个填字游戏。这个游戏玩起来很棒。有两个不同的版本可以玩这个游戏。你也可以玩填字游戏。 关于游戏 这款游戏的玩法很简单。如上所述,它包含拼图和填字游戏。您可以通过移动图像来玩滑动拼图。您还可以选择要在滑动面板中拥有的列数和网格数。 另一个是填字游戏。在这里你只需要找到浏览器左侧提到的那些单词。 要运行此游戏,您需要在系统上安装浏览器。下载并在代码编辑器中打开此项目。然后有一个 index.html 文件可供您修改。在命令提示符中运行该文件,或者您可以直接运行索引文件。使用 Google Chrome 或 FireFox 可获得更好的用户体验。此外,这是一款多人游戏,双方玩家都是人类。 这个游戏包含很多 JavaScript 验证。这个游戏很有趣,如果你能用一点 CSS 修改它,那就更好了。 总的来说,这个项目使用了很多 javascript 和 javascript 库。如果你可以添加一些具有不同颜色选项的级别,那么你一定可以利用其库来提高你的 javascript 技能。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值