(代码详解)绘制气泡图+详细讲解图例设置+如何正确理解气泡图+气泡大小、颜色+调参

目录

 气泡图简介:

一、导入库

二、准备数据

三、画气泡图--基础版

四、画气泡图--进阶版一 (控制气泡大小)

解读气泡图:

五、画气泡图--进阶版二(控制气泡颜色)

(一)用参数c控制气泡颜色

 (二)用for循环的方法控制气泡颜色

(三)给气泡分配指定的颜色(调整气泡颜色分配)

六、添加图例

(一)图例的一些基本设置--参数讲解

(二) 图例的排列方式--横向排放

 (三)调整图例可视化图形大小及透明度

(四)给图例添加标题

(五) 将图例设置到图像外侧

 再次解读气泡图:

七、完整代码


 气泡图简介:

        气泡图(Bubble Chart)是一种数据可视化图形,它主要用于展示多个数据点之间的关系。气泡图通过大小不同的气泡来表示数据点的值,气泡的位置和颜色也可以传递额外的信息。在气泡图中,横轴和纵轴通常表示数据的两个维度,而气泡的半径和位置则表示数据的值。气泡图常用于分析多元数据,特别是在需要考虑多个变量之间关系的情况下。 简单来说,气泡图是一种能够在二维平面上展示多元数据关系的图表,通过气泡的大小、位置和颜色来表示数据点的值和属性。

      在气泡图中,气泡的面积大小(半径大小)通常代表数据的某个属性值,如数值、数量等,面积越大,对应的属性值越大。

      气泡的颜色通常代表另一个属性,如分类、状态等,不同的颜色可以区分不同的类别或状态。

       例如,在反映各国GDP等情况的气泡图中,气泡面积可以代表GDP大小,颜色可以代表国家类别。

下面利用实例来探究气泡图的具体应用,使用的使python

一、导入库

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import seaborn as sns

二、准备数据

iris = load_iris()
# 这里,`load_iris()`函数从sklearn库中加载鸢尾花数据集
X = iris.data
Y = iris.target
# 并将数据和目标变量分别存储在X和Y中。
# X表示花瓣长度、花瓣宽度、花萼长度和花萼宽度等特征,Y表示三个品种(setosa,versicolor,virginica)的标签。

# 将X和Y转换为DataFrame
data = pd.DataFrame(X, columns=iris.feature_names)
data['target'] = Y

这里,`load_iris()`函数从sklearn库中加载鸢尾花数据集

并将数据和目标变量分别存储在X和Y中。

X表示花瓣长度、花瓣宽度、花萼长度和花萼宽度等特征,Y表示三个品种(setosa,versicolor,virginica)的标签。

将X和Y转换为DataFrame形式

数据data表结果如下:

三、画气泡图--基础版

plt.figure(figsize=(15,10))#图形长、宽
plt.rcParams['font.sans-serif'] = ['SimHei']# 中文显示

size =list(data["petal length (cm)"].astype(float))
# size =list(data["petal length (cm)"].astype(float)/0.002)

plt.scatter(data["sepal length (cm)"].astype(float),
            data["sepal width (cm)"].astype(float),
             s=size,
             alpha=0.6)  # 画散点图, alpha=0.6 表示不透明度为 0.6

plt.xlabel('sepal length (cm)',fontsize=20)  # 横坐标轴标题
plt.gca().xaxis.set_label_coords(0.5, -0.1)  # 调整X轴标题与X轴的距离
plt.ylabel('sepal width (cm)',fontsize=20)  # 纵坐标轴标题
plt.gca().yaxis.set_label_coords(-0.08, 0.5)  # 调整y轴标题与y轴的距离

plt.title("气泡图",fontsize=30,pad=15)

plt.tick_params(labelsize=20) #刻度字体大小20


plt.show()

 一些比较基础的设置,在上面代码直接标上注释啦!

 下面直接介绍一下核心部分:

size =list(data["petal length (cm)"].astype(float))

plt.scatter(data["sepal length (cm)"].astype(float),
            data["sepal width (cm)"].astype(float),
            s=size,
            alpha=0.6)

① data["sepal length (cm)"].astype(float) :

    从数据集中提取名为"sepal length (cm)"的列,并将其转换为浮点数类型。

    将这一列数据作为x轴横坐标数据

②data["sepal width (cm)"].astype(float) :

    从数据集中提取名为"sepal width (cm)"的列,并将其转换为浮点数类型。

    将这一列数据作为y轴纵坐标数据

③size =list(data["petal length (cm)"].astype(float)):

   从数据集中提取名为"sepal length (cm)"的列,并将其转换为浮点数类型。

 s=size :设置气泡的大小,也就是将"sepal length (cm)"列的数值大小,当作气泡的面积大小,或者说半径大小。

alpha=0.6 设置气泡的透明度,取值范围为0到1,其中0表示完全透明,1表示完全不透明。

综上,通过调用plt.scatter()函数并传入相应的参数,绘制出气泡图,其中横坐标表示"sepal length (cm)"列的值,纵坐标表示"sepal width (cm)"列的值,点的大小由size变量控制,点的透明度为0.6。

 结果如下图:

图中气泡大小有大有小,但是总体来说都很小,差别不是很大,那么如何将气泡大小差异明显化呢?请看下一节的 四、画气泡图--进阶版一

四、画气泡图--进阶版一 (控制气泡大小)

那么我们进行怎样的操作,气泡图能够从上边的形式,变成下边图的结果呢?

 重点在size!

上边基础版的气泡图,气泡的大小为size =list(data["petal length (cm)"].astype(float)),也就是第三列"petal length (cm)"的数值大小,作为气泡的面积大小。

size =list(data["petal length (cm)"].astype(float)/0.002)

在这里我们将size =list(data["petal length (cm)"].astype(float))/0.002,也就是将原先size的大小除以0.002,原先的值扩大了500倍,也就是将每个气泡的面积分别扩大了原先的500倍。

解读气泡图:

从上边的气泡图,我们可以得到的信息:

①二维变量的关系:

大体上,随着x轴数据的增长,y轴数据也随之增长,可以说明speal length变量和sepal width变量是呈正相关,并且从图中可以看出是线性关系。 

②三维变量的关系:

随着x轴的增长,气泡的大小有所变大,并且随着y轴的增长,气泡的大小也有所变大,可以得出结论,petal length变量与speal length变量和sepal width变量有关系,随着speal length和sepal width值的变大,petal length值也会有所增加。

五、画气泡图--进阶版二(控制气泡颜色)

        气泡的颜色通常代表一个属性,如分类、状态等,不同的颜色可以区分不同的类别或状态。

例如在本例中,鸢尾花数据集的target列有三类,分别是0、1、2类,分别对应的实际意义是

0:山鸢尾花(Iris Setosa)

1:变色鸢尾花(Iris Versicolor)

2:维吉尼亚鸢尾花(Iris Virginica)

那么下面就实现将不同类别的样本对应的气泡赋予不同颜色

(一)用参数c控制气泡颜色
plt.scatter(data["sepal length (cm)"].astype(float),
           data["sepal width (cm)"].astype(float),
           s=size,c=data["target"],
             alpha=0.6) 

就是在上边语句中加入了c=data["target"]:

设置气泡的颜色,其中data["target"]是一个列,表示每个点所属的目标类别。

结果如下:

 (二)用for循环的方法控制气泡颜色

上面我们介绍了利用参数c控制气泡颜色,下边介绍用另一种方法for循环控制气泡颜色,

# 遍历所有唯一的类别并绘制气泡图
for target in data["target"].unique():
    size =list(data[data["target"] == target]["petal length (cm)"].astype(float)/0.002)
    plt.scatter(data[data["target"] == target]["sepal length (cm)"].astype(float),
                data[data["target"] == target]["sepal width (cm)"].astype(float),
                s=size, alpha=0.6)

这段代码的意思是:

       根据不同的目标值(target)绘制散点图,其中每个目标值对应的数据点的大小(size)是根据花瓣长度(petal length)除以0.002得到的。 

       也就是先用一个颜色绘制第一类样本的气泡图,接着用另一个颜色绘制第二类样本的气泡图,最后再用另一个颜色绘制第三个样本绘制的气泡图。

       这样不同类别的样本对应的气泡就赋予了不同的颜色。

结果如下:

(三)给气泡分配指定的颜色(调整气泡颜色分配)
colors = ['blue', 'yellowgreen', 'red']
for i, target in enumerate(data["target"].unique()):
    size =list(data[data["target"] == target]["petal length (cm)"].astype(float)/0.002)
    plt.scatter(data[data["target"] == target]["sepal length (cm)"].astype(float),
                data[data["target"] == target]["sepal width (cm)"].astype(float),
                s=size, alpha=0.8, c=colors[i])

使用c参数来指定气泡的颜色。

具体来说,我们可以将c参数设置为一个列表,其中包含每个数据点的颜色。

例如,我们可以将第一个类别的气泡设置为blue,第二个类别的气泡设置yellowgreen,第三个类别的气泡设置为red.

      这里,我们使用enumerate()函数来获取每个类别的索引和名称,然后使用colors列表来指定每个类别的颜色。

关于enumerate()函数的介绍,小伙伴可以看我主页此文章的上一篇文章enumerate()函数讲解+同时获取索引和对应的元素值+实例-CSDN博客

结果如下:

       运行代码后,我们可以看到气泡图中的颜色已经按照我们指定的颜色进行了设置

六、添加图例

       上面的操作已经将不同类别的气泡赋予了不同的颜色,但是我们现在从图中还不能知道哪个颜色代表哪类样本,因此考虑添加图例。

(一)图例的一些基本设置--参数讲解
legend=plt.legend(data["target"].unique(),fontsize=5,loc='upper right',
            frameon = True, framealpha=0.5,handlelength=2,
            prop={'size': 15},borderpad=1.5,
            facecolor = "orange",edgecolor ="blue")


# 设置图例边框的宽度
legend.get_frame().set_linewidth(3)

①data["target"].unique():以鸢尾花的三个类别当作图例标签

②fontsize=5:设置图例字体大小为5。

  prop={'size': 15}`:设置图例字体大小为15

  应用时,这两个参数作用类似,只设置一个即可。

③loc='upper right':设置图例位置为右上角

loc参数可选如下:

'upper right':右上     'upper left' :左上     'lower left':左下       'lower right':右下

除此之外,还可以通过bbox_to_anchor参数调整图例的位置:
bbox_to_anchor参数设置为(1.05, 1),表示图例的位于图形的右上角的某个位置。小伙伴可以根据需要调整这个值。

④frameon = False去除图例边框,即不要图例的外边框。

   frameon = True绘制图例的外边框

⑤framealpha:控制图例的透明度

⑥handlelength=2:设置图例标记长度为2

⑦borderpad=1.5控制图例外边框的大小

⑧facecolor = ‘orange’ 设置边框填充色为橙色

⑨edgecolor = ‘blue’ 设置图例边框的颜色为蓝色

⑩legend.get_frame().set_linewidth(3):设置图例边框的宽度

结果如下:

(二) 图例的排列方式--横向排放

上边的图例是竖列排放的,如果想让其横向排放,需要用到ncol参数

legend=plt.legend(data["target"].unique(),fontsize=10,loc='upper right',
                 frameon = True, framealpha=0.5,handlelength=2,
                 prop={'size': 15},borderpad=1.5,
                 facecolor = "orange",edgecolor ="blue",ncol = 3)

ncol = 3:横放,参数值为3,是因为图例中有三个标签值。

结果如下:

 (三)调整图例可视化图形大小及透明度
for handle in legend.legendHandles:
    handle.set_sizes([200])
    handle.set_alpha(0.8)

      这段代码的主要作用是调整matplotlib图例中的可视化图形大小和透明度。

     使用set_sizes()和set_alpha()方法来调整标记的大小和透明度。

     这里我们将所有标记的大小设置为200,透明度设置为0.8。

     运行代码,我们可以看到一个包含定制标记大小和透明度的图例

结果如下:

(四)给图例添加标题
legend.set_title("图例")
legend.get_title().set_fontsize(fontsize = 25)

设置图例的标题为“图例”,并设置“图例”的字体大小为25。

结果如下:

(五) 将图例设置到图像外侧
legend=plt.legend(data["target"].unique(),fontsize=10,
            frameon = True, framealpha=0.5,handlelength=2,
            prop={'size': 15},borderpad=1,facecolor = "orange",
            edgecolor ="blue",ncol = 3,bbox_to_anchor=(1, 0.8))


plt.subplots_adjust(right=0.8) 

plt.subplots_adjust(right=0.8) :将右侧边缘调整至距离整体图形边缘 0.8 个单位

bbox_to_anchor=(1, 0.8):图例的位置

       引入bbox_to_anchor=(1, 0.8)参数,以及设置plt.subplots_adjust(right=0.8) 就可以实现如下图的结果:

 再次解读气泡图:

从上边的气泡图中,我们可以看出大体上每一类的气泡都集中在某一大小范围内。

也就是说同一类之间或者组内之间的气泡大小差异不大,或者说同一类之间petal length这个变量的差异不大。

同时也可以看出,红色的2类鸢尾花样本的petal length值最大,其次是绿色的1类鸢尾花样本,最后是蓝色的0类鸢尾花样本,它的petal length值大体上最小。

说明petal length变量在组间差异明显,在组内差异不明显,即petal length变量对鸢尾花数据进行target分类有明显的鉴别作用。

七、完整代码

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import seaborn as sns

iris = load_iris()
# 这里,`load_iris()`函数从sklearn库中加载鸢尾花数据集
X = iris.data
Y = iris.target
# 并将数据和目标变量分别存储在X和Y中。
# X表示花瓣长度、花瓣宽度、花萼长度和花萼宽度等特征,Y表示三个品种(setosa,versicolor,virginica)的标签。
 
# 将X和Y转换为DataFrame
data = pd.DataFrame(X, columns=iris.feature_names)
data['target'] = Y


plt.figure(figsize=(15,10))#图形长、宽
plt.rcParams['font.sans-serif'] = ['SimHei']# 中文显示
 

size =list(data["petal length (cm)"].astype(float)/0.002)


colors = ['blue', 'yellowgreen', 'red']
for i, target in enumerate(data["target"].unique()):
    size =list(data[data["target"] == target]["petal length (cm)"].astype(float)/0.002)
    plt.scatter(data[data["target"] == target]["sepal length (cm)"].astype(float),
                data[data["target"] == target]["sepal width (cm)"].astype(float),
                s=size, alpha=0.8, c=colors[i])
 

 
plt.xlabel('sepal length (cm)',fontsize=20)  # 横坐标轴标题
plt.gca().xaxis.set_label_coords(0.5, -0.1)  # 调整X轴标题与X轴的距离
plt.ylabel('sepal width (cm)',fontsize=20)  # 纵坐标轴标题
plt.gca().yaxis.set_label_coords(-0.08, 0.5)  # 调整y轴标题与y轴的距离
 
plt.title("气泡图",fontsize=30,pad=15)
 
plt.tick_params(labelsize=20) #刻度字体大小20

legend=plt.legend(data["target"].unique(),fontsize=5,loc='upper right',
            frameon = True, framealpha=0.5,handlelength=2,
            prop={'size': 15},borderpad=1.5,
            facecolor = "orange",edgecolor ="blue",ncol=3)

 
 
# 设置图例边框的宽度
legend.get_frame().set_linewidth(3)

for handle in legend.legendHandles:
    handle.set_sizes([200])
    handle.set_alpha(0.8)

legend.set_title("图例")
legend.get_title().set_fontsize(fontsize = 25)



#将图例设置到图像外侧
#legend=plt.legend(data["target"].unique(),fontsize=10,
            #frameon = True, framealpha=0.5,handlelength=2,
            #prop={'size': 15},borderpad=1,facecolor = "orange",
            #edgecolor ="blue",ncol = 3,bbox_to_anchor=(1, 0.8))
 
#plt.subplots_adjust(right=0.8) 
 
 
plt.show()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FFmpeg——在Vue项目中使用FFmpeg(安装、配置、使用、SharedArrayBuffer、跨域隔离、避坑...)

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

Kali Linux安装Xrdp远程桌面工具结合内网穿透实现远程访问Kali桌面

文章目录 前言1. Kali 安装Xrdp2. 本地远程Kali桌面3. Kali 安装Cpolar 内网穿透4. 配置公网远程地址5. 公网远程Kali桌面连接6. 固定连接公网地址7. 固定地址连接测试 前言 Kali远程桌面的好处在于,它允许用户从远程位置访问Kali系统,而无需直接物理访…

韩顺平学java第二阶段之BS框架002

这边讲了php都可以,反正就是打通双方的间隔就行了∑(っД;)っ卧槽,不见了

sap table 获取 valuation class MBEW 查表获取

参考 https://www.tcodesearch.com/sap-tables/search?qvaluationclass

尚硅谷Docker笔记-基础篇

B站视频:https://www.bilibili.com/video/BV1gr4y1U7CY 1.Docker简介 解决了运行环境和配置问题的软件容器 方便做持续集成并有助于整体发布的容器虚拟化技术 容器与虚拟机比较 Docker 容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统…

12、ble_mesh_vendor_model 服务端,自定义模型

1、初始化流程,存储初始化,nvs擦除, board_init();初始化LED。 2、bluetooth_init();ble协议栈初始化 3、ble_mesh_get_dev_uuid(dev_uuid);//获取设备uuid加载到mac,后两位dev uuid 4、ble_mesh_init();//ble mesh协议栈初始化。…

使用Jemeter对HTTP接口压测

我们不应该仅仅局限于某一种工具,性能测试能使用的工具非常多,选择适合的就是最好的。笔者已经使用Loadrunner进行多年的项目性能测试实战经验,也算略有小成,任何性能测试(如压力测试、负载测试、疲劳强度测试等&#…

关键点检测之修改labelme标注的json中类别名

import json import os import shutil#source_dir表示数据扩增之后的文件夹路径,此时标注的是多分类的标签 #new_dir表示转化之后得到的二分类文件夹def to2class():#json存放路径source_dir r1#json保存路径new_dir r1for i in os.listdir(source_dir):if i.ends…

十七、如何将MapReduce程序提交到YARN运行

1、启动某个节点的某一个用户 hadoopnode1:~$ jps 13025 Jps hadoopnode1:~$ yarn --daemon start resourcemanager hadoopnode1:~$ jps 13170 ResourceManager 13253 Jps hadoopnode1:~$ yarn --daemon start nodemanager hadoopnode1:~$ jps 13170 ResourceManager 15062 Jp…

D3D12可编程渲染流水线

一、初始化D3D库 启用 DirectX数学库 x86需要启用SSE2指令集&#xff0c;所有平台均需将浮点模型设置为fast。默认为&#xff1a; 精度 (/fp:precise)。 #include <DirectXMath.h> #include <DirectXPackedVector.h> 启用调试模式下的内存泄漏检测 // Enabl…

vue实现公式编辑器组件

实现方式一 1、效果图 2、实现代码 组件弹框实现 样式自己调整 公式的数字与汉字元素、符号 建立元素表 动态获取 完整代码&#xff08;calculate.vue&#xff09; <template><div id"formulaPage"><divref"formulaView"class"f…

pyqt5实现振动波形数据标注工具

pyqt5实现振动波形数据标注工具 1、效果图 2、实现功能 1、数据库连接 2、数据筛选 3、波形图展示、频谱图展示 4、特征展示&#xff1a;时域、频域 5、数据标注与添加 6、模型训练与分类识别3、部分核心代码 3.1、连接数据库 # -*- coding: utf-8 -*-""" c…

技术探秘:在RISC Zero中验证FHE——由隐藏到证明:FHE验证的ZK路径(1)

1. 引言 开源代码实现见&#xff1a; https://github.com/hashcloak/fhe_risc0_zkvm&#xff08;Rust&#xff09;https://github.com/weikengchen/vfhe-profiled&#xff08;Rust&#xff09;https://github.com/l2iterative/vfhe0&#xff08;Rust&#xff09; L2IV Resea…

后端开发——统一处理异常Spring MVC机制

一、Spring MVC的统一处理异常机制 在Spring MVC中&#xff0c;存在统一处理异常的机制&#xff0c; 具体表现为&#xff1a;无论是哪个处理请求的过程中出现异常&#xff0c;每种类型的异常只需要编写一段处理异常的代码即可&#xff01; 统一处理异常的核心是定义处理异常的…

【INTEL(ALTERA)】Agilex7 FPGA Development Kit DK-DEV-AGI027R1BES编程/烧录/烧写/下载步骤

DK-DEV-AGI027R1BES 的编程步骤&#xff1a; 将外部 USB Blaster II 连接到 J10- 外部 JTAG 接头。将交换机 SW5.3 设置为 ON&#xff08;首次&#xff09;。打开 英特尔 Quartus Prime Pro Edition 软件编程工具。单击 硬件设置 &#xff0c;然后选择 USB Blaster II。将硬件…

LeetCode - 460 LFU缓存(Java JS Python)

题目来源 460. LFU 缓存 - 力扣&#xff08;LeetCode&#xff09; 题目描述 请你为 最不经常使用&#xff08;LFU&#xff09;缓存算法设计并实现数据结构。 实现 LFUCache 类&#xff1a; LFUCache(int capacity) - 用数据结构的容量 capacity 初始化对象int get(int key)…

RocketMQ系统性学习-SpringCloud Alibaba集成RocketMQ以及消息追踪、延时消息实战

文章目录 消息追踪延时消息实战 消息追踪 设置消息追踪需要修改 broker 启动的配置文件&#xff0c;添加一行配置&#xff1a;traceTopicEnabletrue 即可&#xff0c;操作如下&#xff1a; # 进入到 rocketmq 的安装目录中 # 先复制一份配置文件 cp broker.conf custom.conf …

高并发音频转口型服务器开发

课程名称&#xff1a;高并发口型服务器开发 高并发口型服务器 哈喽&#xff0c;大家好&#xff0c;我叫人宅&#xff0c;很高兴和大家一起分享本套课程&#xff0c;高并发口型服务器开发。 虚拟人的口型一直是我们避免不了问题&#xff0c;即使我们不做虚拟人实时口型&#x…

WorkPlus搭建高效即时通讯,打造高效协作新标杆

在现代企业中&#xff0c;即时通讯已成为团队沟通和协作的重要组成部分。作为一款创新的即时通讯工具&#xff0c;WorkPlus致力于提供高效、便捷的沟通和协作体验&#xff0c;打造全新的企业沟通标杆。 WorkPlus的出色之处在于其高效的即时通讯能力。无论是团队内部交流还是跨团…

H266/VVC标准的编码结构介绍

概述 CVS&#xff1a; H266的编码码流包含一个或多个编码视频序列&#xff08;Coded Video Swquence&#xff0c;CVS&#xff09;&#xff0c;每个CVS以帧内随机接入点&#xff08;Intra Random Access Point&#xff0c; IRAP&#xff09;或逐渐解码刷新&#xff08;Gradual …