Python 绘制斜率图进行对比分析

键盘旁的猫
键盘旁的猫
发布时间:2026-10-14| 6人浏览过
原创

本文介绍如何使用 Python 的 Matplotlib 库绘制斜率图,以直观展示两组数据间的维度变化。通过面向对象的方法,结合颜色编码(如橙色表示下降、蓝色表示提升)优化视觉传达,帮助读者快速识别关键数据点并提升信息传递效率。

大家好,我是林骥。

斜率图是一种高效的可视化工具,能够迅速呈现两组数据在各维度上的变化情况,尤其适用于对比两个不同时间点的数据差异。

例如,为了分析某产品各功能的用户满意度,我们通过问卷调查和统计得到了如下数据结果:

大家可以先思考一下,如何对这组数据进行可视化设计,才能更有效地传递核心信息?

以下是我使用 Matplotlib 生成的图表示例:

从图中可以清晰地看到,功能 C 的用户满意度出现显著下降,因此我们采用醒目的橙色进行标注,以引起观众的重点关注;功能 D 和功能 E 的满意度有明显提升,使用蓝色表示,象征数据向积极方向发展;而功能 A 和功能 B 的满意度变化较小,使用浅灰色处理,以此降低视觉干扰,引导观众将注意力集中在满意度显著变化的功能点上,从而最大化图表的信息传递效率。

接下来是具体的 Matplotlib 绘图步骤详解。

第一步,导入必要的库,并配置中文字体及定义相关颜色参数。


# 导入所需的库
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.image as image

# 正常显示中文标签
mpl.rcParams['font.sans-serif'] = ['SimHei']

# 自动适应布局
mpl.rcParams.update({'figure.autolayout': True})

# 正常显示负号
mpl.rcParams['axes.unicode_minus'] = False

# 定义颜色,主色:蓝色,辅助色:灰色,互补色:橙色
c = {'蓝色':'#00589F', '深蓝色':'#003867', '浅蓝色':'#5D9BCF',
   '灰色':'#999999', '深灰色':'#666666', '浅灰色':'#CCCCCC',
   '橙色':'#F68F00', '深橙色':'#A05D00', '浅橙色':'#FBC171'}

第二步,从 Excel 文件中读取模拟数据,并定义用于绘图的数据结构。


# 数据源路径
filepath='./data/问卷调查结果.xlsx'

# 读取 Excel文件
df = pd.read_excel(filepath, index_col='调查年度')

# 定义画图用的数据
category_names = df.columns
labels = df.index
data = df.values
data_cum = data.cumsum(axis=1)

第三步,采用「面向对象」的编程方法进行图表绘制。


# 使用「面向对象」的方法画图,定义图片的大小
fig, ax=plt.subplots(figsize=(6, 6))

# 设置背景颜色
fig.set_facecolor('w')
ax.set_facecolor('w')

# 设置标题
ax.set_title('\n用户满意度随时间的变化\n', fontsize=26, loc='left', color=c['深灰色'])

# 定义颜色
category_colors = [c['浅灰色'], c['浅灰色'], c['橙色'], c['蓝色'], c['蓝色']]

# 画斜率图
for i, color in zip(np.arange(len(df.columns)), category_colors):
  ax.plot(df.index, df.iloc[:, i], marker='o', color=color)

  # 设置数据标签及其文字颜色
  ax.text(-0.03, df.iloc[0, i], df.columns[i] + ' ' + '{:.0%}'.format(df.iloc[0, i]), ha='right', va='center', color=color, fontsize=16)
  ax.text(1.06, df.iloc[1, i], '{:.0%}'.format(df.iloc[1, i]), ha='left', va='center', color=color, fontsize=16)

# 设置 Y 轴刻度范围
ax.set_ylim(df.values.min()-0.02, df.values.max()+0.01)

# 隐藏 Y 轴
ax.yaxis.set_visible(False)

# 隐藏边框
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.spines['bottom'].set_visible(False)

# 隐藏 X 轴的刻度线
ax.tick_params(axis='x', which='major', length=0)

# 设置坐标标签字体大小和颜色
ax.tick_params(labelsize=16, colors=c['灰色'])

plt.show()

执行代码后,即可生成上述图表。

如需获取绘图所用的数据文件和完整代码,可访问 https://github.com/linjiwx/mp 进行下载。

对于同一组数据,不同的观察者可能拥有不同的视角,因此可视化方案往往不止一种。这里介绍的方法并非唯一标准,核心在于图表设计者希望传达何种信息,以及观众能否快速且准确地理解这些内容。

不同类型的图表各自具备独特的优势与局限性。

斜率图的主要优势在于能够直观展示每个类别前后的变化,并通过线条的陡峭程度反映变化的幅度。

然而,斜率图也存在局限:它无法显示整体与部分的占比关系。此外,如果类别的顺序至关重要,则不适合使用斜率图,因为该图表会根据数值大小自动对类别进行排序。

最后,留给大家一个思考题:在你所接触的数据中,有哪些场景适合使用斜率图进行对比分析?

当不确定选择何种图表时,建议先思考:你希望观众了解什么,或采取什么行动?

以上是关于 Python 绘制斜率图进行对比分析的详细介绍,更多 Python 对比分析相关内容,欢迎继续关注本站其他文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。