python 绘制斜率图进行对比分析
作者:代码医生工作室 发布时间:2022-03-18 15:31:38
你好,我是林骥。
斜率图,可以快速展现两组数据之间各维度的变化,特别适合用于对比两个时间点的数据。
比如说,为了对比分析某产品不同功能的用户满意度,经过问卷调查和数据统计,得到下面这个调查结果:
你不妨自己先思考一下,如何对这组数据进行可视化,才能让信息传递变得更加高效?
下面是我用 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 下载画图用的数据和完整代码。
对于同一组数据,不同的人可能会有不同的观察视角,对它们进行可视化,往往也存在多种不同的解决方案,这里介绍的方法,并不是唯一正确的答案。关键在于,图表的设计者想要表达什么信息?是否让观众正确且快速地理解了想要表达的信息?
不同类型的图表,有着不同的优势和劣势。
斜率图的优势,是能快速看到每个类别前后发生的变化,并能根据线条的陡峭程度,直观地感受到变化的幅度。
斜率图的劣势,是看不出整体与部分的占比关系。另外,如果类别的顺序很重要,那么也不适合使用斜率图,因为类别会根据数值大小自动进行排列。
最后,留给你一道思考题:在你看到过的各种数据中,有哪些数据是适合用斜率图进行对比分析的?
当你不知道该选择什么类型的图表时,不妨停下来想一想,你希望让观众了解什么或者做什么?
来源:https://cloud.tencent.com/developer/article/1636336
猜你喜欢
- 提高性能有如下方法1、Cython,用于合并python和c语言静态编译泛型2、IPython.parallel,用于在本地或者集群上并行执
- 经常到这来抄抄改改代码,也贡献一个代码,主要是讨论研究用,没有封装可以进一步改进<!DOCTYPE html PUBLIC "
- 我们在进行表单设计时,可能要用到select下拉选项控件,遗憾的是,IE浏览器默认的select控件外观非常丑陋,而且不能用样式来控制,不能
- 命令行方式运行Python脚本在这个章节中,我们将写一些简单的数据库管理脚本。在此之前让我们来复习一下如何通过命令行方式执行Py
- 本文实例为大家分享了js Tab选项卡切换效果,供大家参考,具体内容如下<!DOCTYPE html><html lang
- 很多人会把Primary Key和聚集索引搞混起来,或者认为这是同一个东西。这个概念是非常错误的。 主键是一个约束(constraint),
- 前言:前面我们提到了Python数据类型中的内置数值类型与字符串类型。今天学习一下Python的序列数据类型,要知道的是在Python中没有
- Readme:blog address:摘要:编写登录接口输入用户名、密码认证成功后显示欢迎信息输错3次后锁定关键词:循环;判断;外部数据读
- 1. 箭头函数的使用ES6 中新增了使用箭头=>来定义函数表达式的方法。很多情况下,箭头函数和函数表达式创建的函数并无区别,只有写法上
- Python 如何转换string到float?简单几步,让你轻松解决。打开软件,新建python项目,如图所示右键菜单中创建.py文件,如
- 前言在 PyQt 中可以使用很多方式实现照片查看器,最朴素的做法就是重写 QWidget 的 paintEve
- ZeroClipboard.js是一个支持复制和粘贴的JavaScript插件,目前官方已经到2.x的版本了,但不支持IE9以下的浏览器,而
- 创建测试表-- ------------------------------ Table structure for check_test-
- 插件机制是代码/功能反向依赖注入到主体程序的一种方法,编译型语言通过动态加载动态库实现插件。对于Python这样的脚本语言,实现插件机制更简
- “自定义函数”是我们平常的说法,而“用户定义的函数”是 SQL Server 中书面的说法。 SQL Server 2000 允许用户创建自
- juypter notebook中直接使用log_device_placement=True打印不出来device信息# Creates a
- 微软现在已经进入了ASP.NET 2.0和Visual Web Developer 2005发布版最
- 1.func Fields(s string) []string,这个函数的作用是按照1:n个空格来分割字符串最后返回的是[]string的
- 刚开始学习python,python相对于java确实要简洁易用得多。内存回收类似hotspot的可达性分析, 不可变对象也如同java得I
- Ansible Inventory 介绍Ansible Inventory 是包含静态 Inventory 和动态 Invent