(代码详解)绘制气泡图+详细讲解图例设置+如何正确理解气泡图+气泡大小、颜色+调参 |
您所在的位置:网站首页 › 气泡图用途 › (代码详解)绘制气泡图+详细讲解图例设置+如何正确理解气泡图+气泡大小、颜色+调参 |
目录 气泡图简介: 一、导入库 二、准备数据 三、画气泡图--基础版 四、画气泡图--进阶版一 (控制气泡大小) 解读气泡图: 五、画气泡图--进阶版二(控制气泡颜色) (一)用参数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() |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |