01
引言
数据可视化提供了比查看原始数字数据更直观的视觉呈现效果。然而,创建引人入胜的图表需要花费时间和精力。Matplotlib 是 Python 数据可视化的标准库。它简单易用,已经被使用了几十年,只需在网上搜索一下,就能找到大家需要的基础知识。
但是原始Matplotlib库的可视化在默认情况下看起来非常糟糕,如果你想要让数据可视化看起来更加专业,那么你必须掌握更加深入的可视化技巧。今天这篇文章的目的就是让大家达到这个目标。闲话少说,我们直接开始吧!
02
准备可视化数据
这里我们使用以下代码来创建一个具有按时间增长趋势的合成时间序列数据集:
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:])
运行后的结果如下:
时间序列样例数据
03
Matplotlib默认可视化
观察上述数据,我们可以看到上述数据集的索引是日期,唯一的属性是浮点数值,因此可以直接通过 plt.plot() 来绘制可视化整个数据集:
plt.figure(figsize=(9, 6))
plt.plot(x, y)
plt.show()
运行后结果如下:
Matplotlib默认可视化图表
观察上图默认可视化的效果,这个可视化效果的分辨率较低,字体大小也比较丑陋,我们接下来就来尝试改进这些可视化的呈现效果。
04
使用rcParams参数
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(x, y)
plt.title("Sales Over Time")
plt.xlabel("Time Period")
plt.ylabel("Sales in 000")
plt.show()
调整图表主题
我们最初的想法只是设定一个基本主题。所以我们并没有在 rcParams 中包含特定于图表的说明。
05
切换显示字体
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 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()
运行结果如下:
最终确定的图表
现在,这几乎看上去是一个相对专业的可视化版本了!通过上述几项具体改进措施使可视化呈现效果大为改观,但如果没有打下坚实的基础,这一切都是不可能的。
07
总结
点击上方小卡片关注我
添加个人微信,进专属粉丝群!