推荐提升时序数据可视化展示的三个技巧

文摘   科技   2024-08-12 05:47   江苏  
点击蓝字
 
关注我们










01


引言



数据可视化提供了比查看原始数字数据更直观的视觉呈现效果。然而,创建引人入胜的图表需要花费时间和精力。Matplotlib 是 Python 数据可视化的标准库。它简单易用,已经被使用了几十年,只需在网上搜索一下,就能找到大家需要的基础知识。

但是原始Matplotlib库的可视化在默认情况下看起来非常糟糕,如果你想要让数据可视化看起来更加专业,那么你必须掌握更加深入的可视化技巧。今天这篇文章的目的就是让大家达到这个目标。闲话少说,我们直接开始吧!






02


准备可视化数据


这里我们使用以下代码来创建一个具有按时间增长趋势的合成时间序列数据集:

import numpy as npimport pandas as pdimport matplotlib.pyplot as plt

# Single season multiplier factors - for seasonality effectseasonal_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 dataxs = np.arange(1, 121)
time_series = []# Split to 10 chunks - 1 year eachfor 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:])

运行后的结果如下:

时间序列样例数据





03


 Matplotlib默认可视化


观察上述数据,我们可以看到上述数据集的索引是日期,唯一的属性是浮点数值,因此可以直接通过 plt.plot() 来绘制可视化整个数据集:

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

运行后结果如下:

Matplotlib默认可视化图表

观察上图默认可视化的效果,这个可视化效果的分辨率较低,字体大小也比较丑陋,我们接下来就来尝试改进这些可视化的呈现效果。





04


  使用rcParams参数


如果让我们手工调整每个图表肯定会浪费大量时间。毕竟,大家制作的大多数图表都有一个基本的主题。声明一次并在所有地方重复使用是很有意义的。这就是 rcParams 参数的作用。
下面的代码片段会更改可视化中的许多内容,并确保将图表渲染为 SVGs。代码如下:
import matplotlib_inlinematplotlib_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()
可视化结果如下:

调整图表主题

我们最初的想法只是设定一个基本主题。所以我们并没有在 rcParams 中包含特定于图表的说明。




05


 切换显示字体


此外我们还可以在 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()

运行结果如下:

更改可视化显示字体

可以看到,切换后的字体的可视化效果看上去更加专业和美观。





06


 针对图表类型进行微调


不同的图表类型会有不同的微调方法。

对于折线图,我们可以更改线条的颜色和宽度,甚至可以添加填充区域部分,使图表看起来更加富有层次感。

下面代码段中的其他改动纯粹是外观上的改动--标题位置和 y 轴限制:

# 1. Line color and widthplt.plot(x, y, color="#1C3041", linewidth=2)# 2. Add shaded area below the lineplt.fill_between(x, y, color="#1C3041", alpha=0.3)# 3. Change title location and font weightplt.title("Sales Over Time", loc="left", fontdict={"weight": "bold"}, y=1.06)
plt.xlabel("Time Period")plt.ylabel("Sales in 000")plt.show()

运行结果如下:

最终确定的图表

现在,这几乎看上去是一个相对专业的可视化版本了!通过上述几项具体改进措施使可视化呈现效果大为改观,但如果没有打下坚实的基础,这一切都是不可能的。





07


 总结


很多同学完全无视 Matplotlib,因为它的默认外观就是很普通。他们认为 "这太模糊、太糟糕了,我不能把这样的视觉效果发给我的老板"。现实与真相相去甚远。大家往往可以修改一堆参数,最后得到一个代码块,甚至可以把它带到任何地方--每一个脚本每一个开发环境。强烈鼓励大家利用这些参数来进一步个性化整体数据可视化的外观呈现效果。







点击上方小卡片关注我




添加个人微信,进专属粉丝群!




AI算法之道
一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
 最新文章