作者:林骥

     来源:林骥

01

你好,我是林骥。

堆叠条形图,用于展示不同类别之间占比数据,常常能起到很好的对比效果。

比如说,对某产品的不同功能进行用户调查,让 100 个用户分别按 1 ~ 5 分进行评分,经过统计,得到每个功能对应评分的人数占比如下:

对这组数据进行对比分析,我们可以把它做成一张堆叠条形图,效果如下:

细心的读者可能会发现,这张图中有一些刻意的设计,例如 1 分和 2 分的条形颜色一样,4 分和 5 分 的条形颜色也一样,因为这里想要让「好评」与「差评」之间的对比更加强烈,让观众一眼就能看出,用户对功能 A 的满意度最高,对功能 B 很不满意。

与普通的条形图相比,这张图还有其他一些细节的改进,在此不再一一赘述,建议读者自己去领会。

数据可视化所做的工作,就是把数据背后的「故事」放进图表中展现出来,起到高效传递信息的作用。

一个成功的数据可视化作品,不在于有多复杂的图形,也不在于有多华丽的外表,而在于其背后生动的故事。

02

下面是具体的实现方法。

首先,导入所需的库,并设置中文字体和定义颜色等。

# 导入所需的库
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
from datetime import timedelta# 正常显示中文标签
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/用户评分占比2.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=(9, 5))# 设置标题
ax.set_title('\n用户对功能 A 最为满意\n\n', fontsize=26, loc='left', color=c['深灰色'])# 倒转 Y 轴,让第一个功能排在最上面
ax.invert_yaxis()# 隐藏 X 轴
ax.xaxis.set_visible(False)
# 设置 X 轴的范围
ax.set_xlim(0, np.sum(data, axis=1).max())# 定义颜色
category_colors = [c['橙色'], c['橙色'], c['灰色'], c['蓝色'], c['蓝色']]# 画堆叠水平条形图
for i, (colname, color) in enumerate(zip(category_names, category_colors)):widths = data[:, i]starts = data_cum[:, i] - widthsax.barh(labels, widths, left=starts, height=0.68, label=colname, color=color, edgecolor='w')xcenters = starts + widths / 2# 设置数据标签及其文字颜色text_color = 'w'for y, (x, d) in enumerate(zip(xcenters, widths)):ax.text(x, y, '{:.0%}'.format(d), ha='center', va='center', color=text_color, fontsize=16)# 显示图例
l = ax.legend(ncol=len(category_names), bbox_to_anchor=(-0.03, 0.95),loc='lower left', fontsize=16, frameon=False, handlelength=0.6)#设置图例中文本的颜色
for i, text in zip(np.arange(len(l.get_texts())), l.get_texts()):if i < 2:text.set_color(c['橙色'])elif i < 3:text.set_color(c['灰色'])else:text.set_color(c['蓝色'])# 隐藏边框
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.spines['bottom'].set_visible(False)# 隐藏 Y 轴的刻度线
ax.tick_params(axis='y', which='major', length=0)# 设置坐标标签字体大小和颜色
ax.tick_params(labelsize=16, colors=c['深灰色'])plt.show()

你可以前往 https://github.com/linjiwx/mp 下载画图用的数据和完整代码。

03

常见的数据可视化元素包括:坐标位置、长度或高度、角度、面积、颜色变化等,不同元素表达数据的精确度也是不一样的。

比如说,人们对坐标位置的变化比较敏感,但是很难从颜色变化中分辨出数据差异的大小。

精心制作一个合适的图表,至少有以下 3 个好处:

(1)传递有效信息,提高沟通的精准度。

(2)获得专业信任,提高数据的可信度。

(3)塑造职业形象,提升职场的竞争力。

◆ ◆ ◆  ◆ ◆

长按二维码关注我们


数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。

管理员二维码:

猜你喜欢

● 笑死人不偿命的知乎沙雕问题排行榜

● 用Python扒出B站那些“惊为天人”的阿婆主!

● 全球股市跳水大战,谁最坑爹!

● 华农兄弟、徐大Sao&李子柒?谁才是B站美食区的最强王者?

● 你相信逛B站也能学编程吗

数据可视化|用堆叠条形图进行对比分析相关推荐

  1. python数据可视化(matplotlib条形图、饼图、箱状图、直方图、折线图)(代码)

    python数据可视化(matplotlib条形图.饼图.箱状图.直方图.折线图) matplotlib(条形图) 一.简单条形图 1.简单垂直条形图 2.简单水平条形图 二.水平交错条形图 三.垂直 ...

  2. R语言ggplot2可视化:ggplot2可视化水平堆叠条形图、并且在每个堆叠条形图的内部居中添加百分比文本标签信息

    R语言ggplot2可视化:ggplot2可视化水平堆叠条形图.并且在每个堆叠条形图的内部居中添加百分比文本标签信息 目录

  3. R语言ggplot2可视化:可视化水平堆叠条形图(horizontal stacked bar plot)并在条形图中的每个分组条形区域显示区域占整体的百分比数值标签

    R语言ggplot2可视化:可视化水平堆叠条形图(horizontal stacked bar plot)并在条形图中的每个分组条形区域显示区域占整体的百分比数值标签(draw stacked bar ...

  4. 可视化框架、Axure原型、大屏可视化、图表组件、图表元件库、统计图表、数据可视化模板、条形图、折线图、散点图、时间轴、仪表盘、饼图、散点图、雷达图、高山图、登录模板、弹窗、弹幕、预警、散点图

    可视化框架.数据可视化综合管理平台.大屏可视化.图表组件.图表元件库.统计图表.数据可视化模板.条形图.折线图.散点图.时间轴.仪表盘.饼图.散点图.雷达图.高山图.登录模板.弹窗.弹幕.预警.散点图 ...

  5. python数据可视化——英雄联盟人物战力分析(条形图)

    案例数据文件下载: https://download.csdn.net/download/weixin_44940488/19129617 实例代码: from pyecharts.charts im ...

  6. R语言数据可视化 画并列条形图和堆叠条形图

    本文将以R自带的数据集Titanic为例,来画并列条形图和堆叠条形图!!!!! 绘制并列条形图和堆叠条形图 我们可以看看数据集Titanic ?Titanic 从Titanic中是4X4的列联表,其中 ...

  7. 芝麻ip代理 | 数据可视化小贴士—原则和对比

    可视化不是单纯的数据展示,其真正价值是设计出可以被读者轻松理解的数据展示.设计过程中的每一个选择,最终都应落地于读者的体验,而非设计者个人.今天我们就来详细讲讲如何快速提升数据可视化能力! 一.原则 ...

  8. python将电视剧按收视率进行排序_Python爬虫实现数据可视化,卫视实时收视率对比,就是如此强大!...

    前言: 几经思考,终于下定给大家分享一下数据可视化方面的知识,希望在这里与大家分享一些关于数据分析&数据挖掘有意思的事情,如果对于内容有任何的意见或建议,都希望大家在评论中不吝赐教. 言归正传 ...

  9. 数据可视化实验:python数据可视化-柱状图,条形图,直方图,饼图,棒图,散点图,气泡图,雷达图,箱线图,折线图

    数据可视化实验:python数据可视化 实验8-12:大数据可视化工具-python 目录 1柱状图 2条形图 3直方图 4饼图 5棒图 6散点图 7气泡图 8雷达图 9箱线图 10折线图 1柱状图 ...

最新文章

  1. 拉取数据_Apache Kafka-数据写入过程
  2. PHP 与 Perl 对照表
  3. Best Cow Line(POJ-3617)
  4. 开源电子商务网站平台Sylius v1.8.6源码
  5. 查看nginx进程_nginx的进程模型与配置
  6. Matlab曲线拟合工具箱CFTOOL实例解析
  7. 写给父亲的语音计算器(‘(‘‘)‘括号优先级处理递归算法c#,一)
  8. 新书出版:《数字滤波器的MATLAB与FPGA实现——Altera/Verilog版(第2版)》已开始印刷出版
  9. 向oracle增加两个重做日志组文件,Oracle重做日志文件
  10. 计算机网络(三)数据链路层详解
  11. Android获取本机号码闪退,手机号码是移动的,现在手机已经停机,想充话费却不知道本机号码,肿么查询本机号码?()...
  12. eclipse新建项目没有src解决办法
  13. [PC] 微软账号连接不上
  14. Redis 性能优化 13 条军规
  15. strstr和strchr的区别
  16. android表格可以编辑,手机wps中如何编辑表格
  17. 知网、万方paperfree 查重的区别
  18. c++ opencv 身份证OCR识别:前期数据训练库准备(tesseractOCR)
  19. 会声会影2020秘钥视频编辑制作使用教程
  20. Win10页面缓冲池剧增占用内存解决方案

热门文章

  1. 服务器电脑增加机械硬盘分区,台式电脑加新、旧机械硬盘分区教程 旧机械硬盘可以装新电脑上吗?...
  2. Social LSTM: Human Trajectory Prediction in Crowded Spaces 论文翻译
  3. BAT实现文件下载功能
  4. Linux虚拟机遇到的一些问题
  5. android应用白屏闪退,解决 APP启动白屏黑屏问题
  6. 以色列技术!Amimon无线WHDI技术解析
  7. 微型计算机最大的电路板是,微型计算机系统中最大的一块电路板被称作 。
  8. Linux--内核版本和发行版本
  9. 用Meta标签代码让360双核浏览器默认极速模式打开网站不是兼容模式
  10. JavaSE + bluecove 蓝牙连接