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

你好,我是林骥。

斜率图,可以快速展现两组数据之间各维度的变化,特别适合用于对比两个时间点的数据。

比如说,为了对比分析某产品不同功能的用户满意度,经过问卷调查和数据统计,得到下面这个调查结果:

你不妨自己先思考一下,如何对这组数据进行可视化,才能让信息传递变得更加高效?

下面是我用 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 对比分析的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python数据分析pandas模块用法实例详解

    本文实例讲述了Python数据分析pandas模块用法.分享给大家供大家参考,具体如下: pandas pandas10分钟入门,可以查看官网:10 minutes to pandas 也可以查看更复杂的cookbook pandas是非常强大的数据分析包,pandas 是基于 Numpy 构建的含有更高级数据结构和工具的数据分析包.就好比 Numpy的核心是 ndarray,pandas 围绕着 Series 和 DataFrame 两个核心数据结构展开 .Series和DataFrame 分

  • Python爬取新型冠状病毒“谣言”新闻进行数据分析

    一.爬取数据 话不多说了,直接上代码( copy即可用 ) import requests import pandas as pd class SpiderRumor(object): def __init__(self): self.url = "https://vp.fact.qq.com/loadmore?artnum=0&page=%s" self.header = { "User-Agent": "Mozilla/5.0 (iPhone;

  • python数据分析工具之 matplotlib详解

    不论是数据挖掘还是数学建模,都免不了数据可视化的问题.对于 Python 来说,matplotlib 是最著名的绘图库,它主要用于二维绘图,当然也可以进行简单的三维绘图.它不但提供了一整套和 Matlab 相似但更为丰富的命令,让我们可以非常快捷地用 python 可视化数据. matplotlib基础 # 安装 pip install matplotlib 两种绘图风格: MATLAB风格: 基本函数是 plot,分别取 x,y 的值,然后取到坐标(x,y)后,对不同的连续点进行连线. 面向对

  • 大数据分析用java还是Python

    大数据学java还是Python? 大数据开发既要学习Python,也要学习java. 学习大数据开发,java语言是基础,主流的大数据软件基本都是java实现的,所以java是必学的, python也是重要的爬取数据的工具,也是大数据后续提高部分需要学习的. Python简介: python是一种面向对象的,解释型的计算机语言,它的特点是语法简介,优雅,简单易学.1989年诞生,Guido(龟叔)开发. 编译型语言:代码在编译之后,编译成2进制的文件,然后计算机就可用运行了.(C,C++,C#

  • Python数据分析库pandas高级接口dt的使用详解

    Series对象和DataFrame的列数据提供了cat.dt.str三种属性接口(accessors),分别对应分类数据.日期时间数据和字符串数据,通过这几个接口可以快速实现特定的功能,非常快捷. 今天翻阅pandas官方文档总结了以下几个常用的api. 1.dt.date 和 dt.normalize(),他们都返回一个日期的 日期部分,即只包含年月日.但不同的是date返回的Series是object类型的,normalize()返回的Series是datetime64类型的. 这里先简单

  • Python Pandas数据分析工具用法实例

    1.介绍 Pandas是基于Numpy的专业数据分析工具,可以灵活高效的处理各种数据集,也是我们后期分析案例的神器.它提供了两种类型的数据结构,分别是DataFrame和Series,我们可以简单粗暴的把DataFrame理解为Excel里面的一张表,而Series就是表中的某一列 2.创建DataFrame # -*- encoding=utf-8 -*- import pandas if __name__ == '__main__': pass test_stu = pandas.DataF

  • Python实现的北京积分落户数据分析示例

    本文实例讲述了Python实现的北京积分落户数据分析.分享给大家供大家参考,具体如下: 北京积分落户状况 获取数据(爬虫/文件下载)-> 分析 (维度-指标) 从公司维度分析不同公司对落户人数指标的影响 , 即什么公司落户人数最多也更容易落户 从年龄维度分析不同年龄段对落户人数指标影响 , 即什么年龄段落户人数最多也更容易落户 从百家姓维度分析不同姓对落户人数的指标影响 , 即什么姓的落户人数最多即也更容易落户 不同分数段的占比情况 # 导入库 import numpy as np import

  • 基于Python数据分析之pandas统计分析

    pandas模块为我们提供了非常多的描述性统计分析的指标函数,如总和.均值.最小值.最大值等,我们来具体看看这些函数: 1.随机生成三组数据 import numpy as np import pandas as pd np.random.seed(1234) d1 = pd.Series(2*np.random.normal(size = 100)+3) d2 = np.random.f(2,4,size = 100) d3 = np.random.randint(1,100,size = 1

  • 详解python爬取弹幕与数据分析

    很不幸的是,由于疫情的关系,原本线下的AWD改成线上CTF了.这就很难受了,毕竟AWD还是要比CTF难一些的,与人斗现在变成了与主办方斗. 虽然无奈归无奈,但是现在还是得打起精神去面对下一场比赛.这个开始也是线下的,决赛地点在南京,后来是由于疫情的关系也成了线上. 当然,比赛内容还是一如既往的得现学,内容是关于大数据的. 由于我们学校之前并没有开设过相关培训,所以也只能自己琢磨了. 好了,废话先不多说了,正文开始. 一.比赛介绍 大数据总体来说分为三个过程. 第一个过程是搭建hadoop环境.

  • python 数据分析实现长宽格式的转换

    我就废话不多说了,大家还是直接看代码吧! # encoding=utf-8 import numpy as np import pandas as pd # 长宽格式的转换 # 1 data = pd.read_csv('d:data/macrodata.csv') print 'data:=\n', data print 'data.to_records():=\n', data.to_records() print 'data.year:=\n', data.year print 'data

  • Python 数据分析之逐块读取文本的实现

    背景 <利用Python进行数据分析>,第 6 章的数据加载操作 read_xxx,有 chunksize 参数可以进行逐块加载. 经测试,它的本质就是将文本分成若干块,每次处理 chunksize 行的数据,最终返回一个TextParser 对象,对该对象进行迭代遍历,可以完成逐块统计的合并处理. 示例代码 文中的示例代码分析如下: from pandas import DataFrame,Series import pandas as pd path='D:/AStudy2018/pyda

  • python数据分析:关键字提取方式

    TF-IDF TF-IDF(Term Frequencey-Inverse Document Frequency)指词频-逆文档频率,它属于数值统计的范畴.使用TF-IDF,我们能够学习一个词对于数据集中的一个文档的重要性. TF-IDF的概念 TF-IDF有两部分,词频和逆文档频率.首先介绍词频,这个词很直观,词频表示每个词在文档或数据集中出现的频率.等式如下: TF(t)=词t在一篇文档中出现的次数/这篇文档的总词数 第二部分--逆文档频率实际上告诉了我们一个单词对文档的重要性.这是因为当计

随机推荐