一、概念介绍

马赛克图(Mosaic plot),基于列联表的数据排布,展现二维定性变量下的取值大小,我们可以将它想象成三维柱状图的俯视,颜色差异或面积大小常被用于区分每个块的赋值大小。

· 什么是列联表?

如上所示,列联表会呈现两个维度定性变量的取值,比如:维度一是 性别,维度二是 评级(优/良),则a=性别为男生,评级为优的人数。

如果要展示这样一个分布的话,柱状图是该选择复合柱状图还是堆叠柱状图更合适呢?

在做选择之前,我们必须要了解清楚可视化图像展示数据的渠道和导向,如果是复合柱状图,被选作横坐标的类别是我们不会细致挖掘的类差异。

如我们选择性别作为横坐标,评级作为hue,那在分析的过程中,我们大概率会以这样一种范式:“对于女性群体而言,其评级为优的人数为c,多于(少于)评级为良的人数d;而对于男性群体而言,拥有相同的差异(结论相反)”。在上述分析文字中,也即是我们视觉第一眼看到的结论中,我们会将靠的更近的图形进行对比,而不会专门挑出评级为优的群体,对比性别比例。

因此,我们出现了马赛克图,一个和列联表一一对应的图形。

示例图如下:(百度随机搜的,侵权删)

它长得很像百分比柱状图,即列长度固定。但这里宽度是依赖于马赛克块的面积大小的。


二、数据展示

接下来,我们希望通过python利用一个数据来绘制用  颜色   区分数值的马赛克图。

数据详细介绍在 https://blog.csdn.net/qq_45400322/article/details/122519911?spm=1001.2014.3001.5502

我们希望实现的是:利用八个城市过去一年的天气类型(多云、小雨、晴等)数据,得到其一年中常出现的天气类型信息。


三、数据导入

因为是同一个excel表格的数据(为了绘制多类型图,也算是重复利用了),导入的代码也类似,可忽略。

import pandas as pd
import numpy as np
city8_fullname_py = ['beijing','chongqing','wuhan','shenzhen','nanjing','guangzhou','chengdu','shanghai']
city8_fullname = ['北京','重庆','武汉','深圳','南京','广州','成都','上海']
weather_dic = {}
for i in range(len(city8_fullname)):df = pd.DataFrame(pd.read_excel('./2021年城市气温数据/2021年气温数据'+city8_fullname_py[i]+'.xls'))weather_dic[city8_fullname[i]] = df[['日期','最高温','最低温','气候类型']]weather_dic[city8_fullname[i]]['城市'] = pd.Series([city8_fullname[i]]*df.shape[0])
weather = weather_dic[city8_fullname[0]]
for i in range(1,8):weather = pd.concat([weather,weather_dic[city8_fullname[i]]],ignore_index="true")

得到的数据结构如下所示:


四、图像绘制

如上所述,我们需要将dataframe的数据【气候类型】【城市】生成列联表 ,再用plt画图

import matplotlib.pyplot as plt
# 中文与正负号显示设置
plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'
plt.rcParams['axes.unicode_minus'] = False
## --马赛克图
cross_table_weather = pd.crosstab(weather['城市'],weather['气候类型'])
N_weathertype = cross_table_weather.shape[1]plt.figure(figsize=(20,6))
plt.imshow(cross_table_weather, cmap = 'Set3')
plt.colorbar()
plt.xticks(np.arange(N_weathertype),cross_table_weather.columns,rotation=90,fontsize=14)
plt.yticks(np.arange(8),cross_table_weather.index,fontsize=14)
for i in range(8):for j in range(N_weathertype):plt.text(j,i,np.matrix(cross_table_weather)[i,j],ha='center',va='center',color='k')
# plt.savefig(r'./绘图结果/天气-过去一年天气类型分布-马赛克图.png')

pd.crosstab------指定两列数据,生成列联表

plt.imshow------比较常用于绘制热力图,或者暂不显示图像,后期补draw。

plt.colorbar------显示色域条,有点像legend

绘制结果如下所示:

因为在数据探索阶段,我们了解到类型分布主要集中在这几类,而我们的目的不想去比较哪一类哪个城市出现的最多,仅需要实现突出类型,所以为了与一年中只出现几天或者从未出现的天气类型,我们采用的是set,没有使用渐变色。

从上图我们可以发现,多云、小雨、晴和阴是八座城市常出现的天气类型,具体数值的比较可以借助标记的text,和右边的colorbar。

希望对您有所帮助~

利用matplotlib绘制马赛克图的案例相关推荐

  1. 利用matplotlib绘制圆环图的案例

    一.概念介绍 圆环图(Donut Chart),又称为环形图,甜甜圈图.它从饼图变形而来,单环的作用上与饼图相似,用于展示定性数据中小类占大类的比例关系. Q: 那既然都有饼图了,为什么还要圆环图呢? ...

  2. python绘制折线图保存_Python利用matplotlib绘制折线图的新手教程

    前言 matplotlib是Python中的一个第三方库.主要用于开发2D图表,以渐进式.交互式的方式实现数据可视化,可以更直观的呈现数据,使数据更具说服力. 一.安装matplotlib pip i ...

  3. Python中利用Matplotlib绘制多图并合并展示

    有个需求就是利用Matplotlib画几个像模像样的统计图然后合并在一张图中,因为此前很少用这方面的东西,所以折腾了不少时间,今天介绍一下. 1.subplot多合一 其实,利用python 的mat ...

  4. 利用Joypy绘制嵴线图的案例

    一.概念介绍 嵴线图(ridgeline plot),用来展示同一维度的几个数据的分布情况,每一层嵴线(峰峦)都是一个直方图或者密度图,层层堆叠形成了最终的嵴线图. · 嵴线图一般用于多类别(> ...

  5. 利用pyecharts绘制水球图的案例

    一.概念介绍 水球图(Liquid Fill Chart),听名字或许比较陌生,但从命名的角度也可以猜测出此类图像以球形水波显示.水球图属于填充仪表盘类,可以用于生动地展示单个百分比数据或评分数据. ...

  6. 利用Pyecharts绘制漏斗图的案例【含参数详解】

    一.概念介绍 漏斗图(Funnel),也称为倒三角图,借助echarts的解释如下: Funnel diagram is suitable for one-way analysis of single ...

  7. 利用Pyecharts绘制仪表盘图的案例【含参数解释】

    目录 一.概念解释 二.数据导入 三.单指针仪表盘 四.参数解释 五.多指针仪表盘 一.概念解释         仪表盘图(Gauge),这里指的并不是人力常用的多图表在同页面聚合排布的绘图方法. 仪 ...

  8. python条形图x轴设定_Python入门--利用matplotlib绘制折线图和条形图(1)

    目标一:绘制一幅折线图 # 代码如下: import matplotlib.pyplot as plt input_values = [1, 2, 3, 4, 5] squares = [1, 4, ...

  9. Python之matplotlib:利用matplotlib绘制八象空间三维图案例(知识点包括散点图、折线图、标注文字、图例、三维坐标)之详细攻略

    Python之matplotlib:利用matplotlib绘制八象空间三维图案例(知识点包括散点图.折线图.标注文字.图例.三维坐标)之详细攻略 目录

最新文章

  1. [bzoj1011] [HNOI2008]遥远的行星
  2. 使用visio 提示此UML形状所在的绘图页不是UML模型图的一部分 请问这个问题怎么解决?...
  3. Android Fragment 使用详解
  4. Unity 2D教程: 滚动,场景和音效
  5. 对比找出两张Excel表的不同数据
  6. 动画练习-360度旋转-animation
  7. 笔记本cpu和台式cpu有什么区别
  8. 对话框不响应WM_KEYDOWN消息,可以通过重载BOOL PreTranslateMessage(MSG * pMsg)来实现
  9. SpringBoot文件上传与校验
  10. OpenMp之sections用法
  11. Visual Studio2019新手C++教程(一)
  12. R语言读写中文编码方式
  13. php xampp linux,xampp linux 下载
  14. POS终端“密事”之PIN加解密
  15. 简述微型计算机的组成和工作原理,简述计算机系统组成及计算机工作原理
  16. 水仙花数的实现(Java)
  17. ZXing 生成二维码模糊
  18. 网易游戏《荒野行动》《阴阳师》等出海实践-AWS技术峰会演讲实录
  19. Flash 安装、修复和诊断工具分享(Flash大厅)
  20. Vue2.0快速入门

热门文章

  1. 02、(1)随机森林
  2. android auto p30,手机资讯导报:华为P30Lite曝光后置三摄6.15寸水滴屏
  3. QQ邮箱停运,如何使用网易163邮箱实现邮件发送。
  4. linux特殊文件名字删除不了怎么办
  5. 国产开源项目的七宗罪(转)
  6. 全球及中国化肥市场“十四五”竞争形势及投资动态分析报告2021-2027年
  7. 关于jq中:eq和.eq()的区别
  8. 华硕ROG|玩家国度 冰刃7双屏 GX650PY Windows11原厂预装系统 工厂模式恢复安装带ASUSRecevory一键还原
  9. python数据可视化开发(1):Matplotlib库基础知识
  10. 深入理解Android相机体系结构之六