【Matplotlib作图-4.Distribution】50 Matplotlib Visualizations, Python实现,源码可复现

目录

  • 04Distribution
    • 4.0 Prerequisite
    • 4.1 连续变量的直方图(Histogram for Continuous Variable)
    • 4.2 分类变量的直方图(Histogram for Categorical Variable)
    • 4.3 Density Plot
    • 4.4 Density Curves with Histogram
    • 4.5 Joy Plot
    • 4.6 Distributed Dot Plot
    • 4.7 Box Plot
    • 4.8 Dot + Box Plot
    • 4.9 Violin Plot
    • 4.10 Population Pyramid
    • 4.11 Categorical Plots
  • References

04Distribution


4.0 Prerequisite

  • Setup.py
# !pip install brewer2mpl
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
import warnings; warnings.filterwarnings(action='once')large = 22; med = 16; small = 12
params = {'axes.titlesize': large,'legend.fontsize': med,'figure.figsize': (16, 10),'axes.labelsize': med,'axes.titlesize': med,'xtick.labelsize': med,'ytick.labelsize': med,'figure.titlesize': large}
plt.rcParams.update(params)
# plt.style.use('seaborn-whitegrid')
plt.style.use("seaborn-v0_8")
sns.set_style("white")
# %matplotlib inline# Version
print(mpl.__version__)  #> 3.7.1
print(sns.__version__)  #> 0.12.2

4.1 连续变量的直方图(Histogram for Continuous Variable)

  • Histogram shows the frequency distribution of a given variable. The below representation groups the frequency bars based on a categorical variable giving a greater insight about the continuous variable and the categorical variable in tandem. Create histogram and learn how to interpret them in this free video tutorial.
    直方图显示了给定变量的频率分布。下面的表示根据一个分类变量对频率条进行分组,从而更好地理解连续变量和分类变量之间的关系。
    直方图是一种可视化工具,用于展示连续变量的频率分布情况。它将连续变量的取值范围划分为若干个等宽的区间(也称为箱子或区间),然后统计每个区间内的观测值数量或频率。
    在上述描述中,提到了一个额外的因素,即基于一个分类变量对频率条进行分组。这意味着可以使用某个分类变量来将观测值分组,然后在每个组内绘制直方图。这种绘制方式可以提供更多关于连续变量和分类变量之间关系的见解。
    通过创建直方图,我们可以直观地了解连续变量的分布情况。直方图的横轴表示连续变量的取值范围,纵轴表示频率或观测值数量。直方图的柱状条表示每个区间内的观测值数量或频率,柱状条的高度越高,表示该区间内的观测值越多。
    通过观察直方图,我们可以得到以下信息:
    1)连续变量的整体分布形状:直方图的整体形状可以告诉我们连续变量的分布情况,例如是否呈现正态分布、偏态分布或双峰分布等。
    2)连续变量的中心位置:直方图的峰值所在的区间可以提供连续变量的中心位置信息。
    3)连续变量的范围和离散程度:直方图的横轴范围和柱状条的高度可以帮助我们了解连续变量的取值范围和离散程度。
    通过将直方图与分类变量结合使用,我们可以更好地理解连续变量和分类变量之间的关系。这种组合可以揭示在不同分类变量水平下连续变量的分布差异,帮助我们发现潜在的模式或趋势。

  • mpg_ggplot2.csv 展示不同汽车制造商的城市燃油效率(每加仑行驶的英里数):

"manufacturer","model","displ","year","cyl","trans","drv","cty","hwy","fl","class"
"audi","a4",1.8,1999,4,"auto(l5)","f",18,29,"p","compact"
"audi","a4",1.8,1999,4,"manual(m5)","f",21,29,"p","compact"
"audi","a4",2,2008,4,"manual(m6)","f",20,31,"p","compact"
"audi","a4",2,2008,4,"auto(av)","f",21,30,"p","compact"
"audi","a4",2.8,1999,6,"auto(l5)","f",16,26,"p","compact"
"chevrolet","c1500 suburban 2wd",5.3,2008,8,"auto(l4)","r",14,20,"r","suv"
"chevrolet","c1500 suburban 2wd",5.3,2008,8,"auto(l4)","r",11,15,"e","suv"
"chevrolet","c1500 suburban 2wd",5.3,2008,8,"auto(l4)","r",14,20,"r","suv"
"chevrolet","c1500 suburban 2wd",5.7,1999,8,"auto(l4)","r",13,17,"r","suv"
  • 程序代码为:
# 目的是根据车辆类型(class)对发动机排量(displ)进行堆叠直方图的可视化。每个直方图的颜色表示不同的车辆类型,柱子的高度表示频数(数量)。
# Import Data
# 使用pd.read_csv函数从指定的URL读取CSV文件,并将其存储在名为df的DataFrame中:
df = pd.read_csv("https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv")# Prepare data
# 选择两个变量,x_var表示横轴变量为'displ'(发动机排量),groupby_var表示按照'class'(车辆类型)进行分组。代码通过对数据进行分组并提取特定变量的方式,得到每个分组的值。
x_var = 'displ'
groupby_var = 'class'
# 对DataFrame进行索引,只选择x_var和groupby_var两列的数据,并使用groupby函数按groupby_var进行分组:
df_agg = df.loc[:, [x_var, groupby_var]].groupby(groupby_var)
# 使用列表推导式遍历每个分组,并将每个分组的x_var值存储在名为vals的列表中:
vals = [df[x_var].values.tolist() for i, df in df_agg]# Draw
plt.figure(figsize=(16,9), dpi= 80)
# 定义颜色列表,用于为每个分组设置不同的颜色。这里使用了plt.cm.Spectral颜色映射函数。
colors = [plt.cm.Spectral(i/float(len(vals)-1)) for i in range(len(vals))]
# 使用plt.hist函数绘制堆叠直方图。vals是一个包含每个分组值的列表,30表示直方图的柱子数量,stacked=True表示堆叠显示直方图,density=False表示纵轴为频数。函数返回直方图的计数值、柱子边界和绘制的图形对象:
n, bins, patches = plt.hist(vals, 30, stacked=True, density=False, color=colors[:len(vals)])# Decoration
# 添加图形装饰。使用plt.legend函数添加图例,将每个分组对应的颜色与分组名称关联起来。设置标题、横轴名称、纵轴名称、纵轴范围和横轴刻度。
plt.legend({group:col for group, col in zip(np.unique(df[groupby_var]).tolist(), colors[:len(vals)])})
plt.title(f"Stacked Histogram of ${x_var}$ colored by ${groupby_var}$", fontsize=22)
plt.xlabel(x_var)
plt.ylabel("Frequency")
plt.ylim(0, 25)
plt.xticks(ticks=bins[::3], labels=[round(b,1) for b in bins[::3]])
plt.show()
  • 运行结果为:

4.2 分类变量的直方图(Histogram for Categorical Variable)

  • The histogram of a categorical variable shows the frequency distribution of a that variable. By coloring the bars, you can visualize the distribution in connection with another categorical variable representing the colors.
    分类变量的直方图显示了该变量的频率分布。通过对柱子进行着色,可以将其与表示颜色的另一个分类变量的分布进行可视化。

  • 程序代码为:

# Import Data
df = pd.read_csv("https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv")# Prepare data
# x_var被设置为字符串'manufacturer',表示在x轴上要显示的变量是制造商。groupby_var被设置为字符串'class',表示要根据类别进行分组。
x_var = 'manufacturer'
groupby_var = 'class'
# 使用df.loc函数选择df中的x_var和groupby_var列,并使用groupby方法按groupby_var分组。这将创建一个分组后的DataFrame对象df_agg。
df_agg = df.loc[:, [x_var, groupby_var]].groupby(groupby_var)
# 使用列表推导式生成一个名为vals的列表。在每次迭代中,从df_agg中获取分组后的DataFrame,并提取x_var列的值并转换为列表。这将为每个类别创建一个列表,其中包含该类别下的所有制造商。
vals = [df[x_var].values.tolist() for i, df in df_agg]# Draw
plt.figure(figsize=(16,9), dpi= 80)
# 生成一组颜色,用于堆叠直方图的每个类别。这里使用plt.cm.Spectral函数生成颜色,通过将i除以len(vals)-1来控制颜色的渐变。
colors = [plt.cm.Spectral(i/float(len(vals)-1)) for i in range(len(vals))]
# 使用plt.hist函数绘制堆叠直方图。其中,vals是要绘制的值的列表,df[x_var].unique().__len__()表示x轴上的条形数,即不同制造商的数量。stacked=True表示堆叠直方图,density=False表示显示的是频数而不是密度。color=colors[:len(vals)]表示使用之前生成的颜色列表。
n, bins, patches = plt.hist(vals, df[x_var].unique().__len__(), stacked=True, density=False, color=colors[:len(vals)])# Decoration
# 使用plt.legend函数添加图例。通过使用字典推导式,将每个类别和其对应的颜色进行映射。
plt.legend({group:col for group, col in zip(np.unique(df[groupby_var]).tolist(), colors[:len(vals)])})
# 使用plt.title函数设置图形标题,其中包括变量名和分组变量名。使用plt.xlabel和plt.ylabel函数分别设置x轴和y轴的标签。使用plt.ylim函数设置y轴的取值范围。使用plt.xticks函数设置x轴刻度的位置和标签,并进行一些旋转和对齐操作。
plt.title(f"Stacked Histogram of ${x_var}$ colored by ${groupby_var}$", fontsize=22)
plt.xlabel(x_var)
plt.ylabel("Frequency")
plt.ylim(0, 40)
# plt.xticks(ticks=bins, labels=np.unique(df[x_var]).tolist(), rotation=90, horizontalalignment='left')
plt.xticks(rotation=90, horizontalalignment='left')
plt.show()
  • 运行结果为:

4.3 Density Plot

4.4 Density Curves with Histogram

4.5 Joy Plot

4.6 Distributed Dot Plot

4.7 Box Plot

4.8 Dot + Box Plot

4.9 Violin Plot

4.10 Population Pyramid

4.11 Categorical Plots






References


  • Top 50 matplotlib Visualizations
  • 【Matplotlib作图-1.Correlation】50 Matplotlib Visualizations, Python实现,源码可复现
  • 【Matplotlib作图-2.Deviation】50 Matplotlib Visualizations, Python实现,源码可复现
  • 【Matplotlib作图-3.Ranking】50 Matplotlib Visualizations, Python实现,源码可复现


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/21833.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解和实现数据表格中的行数据合并功能

theme: smartblue 前言 需求场景: 在提供了数据查看和修改的表格视图中(如table、a-table等…),允许用户自行选择多行数据,依据当前状态进行特定列数据的合并操作。选中的数据将统一显示为选中组的首条数据值。同时,页面会即时反…

插入排序(直接插入排序与希尔排序)----数据结构-排序①

1、插入排序 1.1 插入排序的基本思想 将待排序的元素按其数值的大小逐个插入到一个已经排好序的有序序列中,直到所有的元素插入完为止,就可以得到一个新的有序序列 。 实际上在我们的日常生活中,插入排序的应用是很广泛的,例如我…

二分查找算法介绍(边界值、循环条件、值的变化、二分查找的原理、异常处理)

一、二分查找法原理介绍 二分查找是经典的查找算法之一,其原理也非常简单。 对于已排序的数组(假设是整型,如果非整型,如果有排序和大小比较的定义,也可以使用二分查找),我们每次判断中间值与目…

Golang TCP网络编程

文章目录 网络编程介绍TCP网络编程服务器监听客户端连接服务器服务端获取连接向连接中写入数据从连接中读取数据关闭连接/监听器 简易的TCP回声服务器效果展示服务端处理逻辑客户端处理逻辑 网络编程介绍 网络编程介绍 网络编程是指通过计算机网络实现程序间通信的一种编程技术…

三十五、openlayers官网示例Dynamic Data——在地图上加载动态数据形成动画效果

官网demo地址: Dynamic Data 初始化地图 const tileLayer new TileLayer({source: new OSM(),});const map new Map({layers: [tileLayer],target: "map",view: new View({center: [0, 0],zoom: 2,}),}); 创建了三个样式 const imageStyle new Style(…

黑马微服务实用篇知识梳理

1、微服务治理 1.1服务注册与发现Eureka和Nacos a、nacos和eureka,二者都支持服务注册与发现,但nacos还包括了动态配置管理、服务健康监测、动态路由等功能,是更全面的服务管理平台 b、eureka需要独立部署为服务并运行,需要自行搭…

师彼长技以助己(3)逻辑思维

师彼长技以助己(3)逻辑思维 前言 上一篇文章进行了工程思维和产品思维的测试,并介绍了几个比较重要的产品思维模型。接下来本篇介绍工程思维。(注意产品思维并不代表产品经理思维,工程思维也并不代表工程师思维&…

【用户画像】用户偏好购物模型BP

一、前言 用户购物偏好模型BP(Buyer Preferences Model)旨在通过对用户购物行为的深入分析和建模,以量化用户对不同商品或服务的偏好程度。该模型对于电商平台、零售商以及其他涉及消费者决策的商业实体来说,具有重要的应用价值。…

linux,lseek,append用法

打开写的.c文件 内容为 代码 <sys/stat.h> #include <fcntl.h> #include<stdio.h> #include<unistd.h> #include<string.h>//off_t lseek(int fd, off_t offset, int whence); //int open(const char *pathname, int flags); //int open(const …

二类电商想做爆品还是得会选品

对于二类电商&#xff0c;尤其是电商新手而言&#xff0c;往往很多人都不知道自己该如何选品&#xff0c;在哪里选品&#xff0c;以及如何谈品等等的难题。想要挑选具有潜力的商品&#xff0c;首先我们需要梳理好商品选择的逻辑&#xff1a; 二类电商的特点&#xff1f;你要投…

装机必备——360驱动大师安装教程

装机必备——360驱动大师安装教程 软件下载 软件名称&#xff1a;360驱动大师2.0beta 软件语言&#xff1a;简体中文 软件大小&#xff1a;13.87M系统要求&#xff1a;Windows7或更高&#xff0c; 32/64位操作系统 硬件要求&#xff1a;CPU2GHz &#xff0c;RAM2G或更高 下载…

36【Aseprite 作图】蒸笼盖——拆解

1 蒸笼盖框架 里圈和外圈的形状都是一样的 扶手处&#xff0c;2 1 2 2 2&#xff08;最好都是2&#xff0c;拐角处用1&#xff09; 2 上色 中间的波浪&#xff0c;是2 2 2 上&#xff08;再 2 2 2 下&#xff09; 下方阴影&#xff0c;左边的阴影&#xff0c;右边的阴影颜色…

冯喜运:6.3黄金原油晚间最新行情及独家操作策略指导

【黄金消息面分析】&#xff1a;在全球经济的波动和不确定性中&#xff0c;黄金作为传统的避险资产&#xff0c;其价格走势和市场分析一直是投资者关注的焦点。本周一&#xff08;北京时间6月3日&#xff09;&#xff0c;现货黄金价格基本持平&#xff0c;交易商正在等待本周公…

一个AI板卡电脑--香橙派 AIpro

本文算是一个开箱测评&#xff0c;主要评估它和一个电脑的距离。 香橙派官网&#xff1a;香橙派(Orange Pi)-Orange Pi官网-香橙派开发板,开源硬件,开源软件,开源芯片,电脑键盘香橙派&#xff08;Orange Pi&#xff09;是深圳市迅龙软件有限公司旗下开源产品品牌;香橙派&#x…

抖音小店怎么找厂家代发?从沟通到发货,全流程不容错过!

哈喽~ 我是电商月月 新手做抖音小店&#xff0c;无货源模式的商家不知道怎么找货源&#xff1f; 今天月月就给大家讲解一下抖音小店从找厂家&#xff0c;到和厂家沟通&#xff0c;最后协商发货的方法步骤都有哪些&#xff1f; 满满干货&#xff0c;不容错过&#xff0c;建议…

游戏找不到d3dcompiler43.dll怎么办,分享5种有效的解决方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是找不到某个文件。其中&#xff0c;找不到d3dcompiler43.dll是一个常见的问题。这个问题通常出现在运行某些游戏或应用程序时&#xff0c;由于缺少了d3dcompiler43.dll文件&#xff0c;导致程…

openeuler欧拉系统连不上网,ping百度报错,ping: www.baidu.com: Name or service not known

一、现象 使用华为 openeuler 系统连不上网&#xff0c;ping 百度报如下错误 ↓ ping: www.baidu.com: Name or service not known二、原因 没有配置dns服务器 三、解决办法 进入网络配置文件存放文件夹 cd /etc/sysconfig/network-scripts/查看对应的网口文件 ls ps: 不同系…

C语言:(动态内存管理)

目录 动态内存有什么用呢 malloc函数 开辟失败示范 free函数 calloc函数 realloc函数 当然realooc也可以开辟空间 常⻅的动态内存的错误 对NULL指针的解引⽤操作 对动态内存开辟的空间越界访问 对⾮动态开辟内存使⽤free释放 使⽤free释放⼀块动态开辟内存的⼀部分 …

TCP三次握手四次挥手,滑动窗口

TCP三次握手 TCP&#xff08;传输控制协议&#xff09;是一种重要的网络协议&#xff0c;它属于互联网协议套件中的传输层&#xff0c;主要用于在不可靠的互联网上提供可靠的、有序的和无差错的数据传输。下面详细介绍TCP的工作原理&#xff0c;包括其连接建立的三次握手过程。…

类和对象(下)【初始化列表】【static成员】【友元】等..... .及【练习题】

类和对象&#xff08;下&#xff09; 1.再谈构造函数 1.1构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值。 // 初始化列表 # include<iostream> using namespace std;class Date { public:// 构造…