数据获取

       •绘制气泡所需的数据与之前散点图的数据是一样的,都是美国中西部地区人口分布详情数据集,需要数据的可通过下面博客获取:Python数据可视化之散点图(进阶篇—图文并茂详细版!!!)
       •上述数据集中包含很多常用的数据集,可供我们平时数据分析使用,非常实用!!!
在这里插入图片描述

数据分析

与散点图对比

       •用上述数据绘制的散点图如下:
在这里插入图片描述
       •散点图仅仅反映了横,纵坐标之间的关系,没有真实的反映出点与点不同性质之间的差异,不方便我们对比点与点之间的对应关系
       •此时我们就需要气泡图:气泡图允许在图表中额外加入一个表示大小的变量进行点与点对比

绘制气泡图

确定需要对比的属性

       •绘制流程和散点图相似,导入数据,确定横纵坐标,不同点:需要确定一个特征性质,进行点与点之间的属性对比
在这里插入图片描述

       •我们选择所有特征中的’‘亚洲人口’'作为我们需要对比的属性进行绘图
代码测试:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns

# 导入数据
midwest = pd.read_csv(r'D:\9\midwest_filter.csv')

# 预设图像各种信息
large = 22
med = 16
small = 12
params = {'axes.titlesize': large,  # 子图上的标题字体大小
          'legend.fontsize': med,  # 图例的字体大小
          'figure.figsize': (med, small),  # 画布大小
          'axes.labelsize': med,  # 标签的字体大小
          'xtick.labelsize': med,  # x轴标尺的字体大小
          'ytick.labelsize': med,  # y轴标尺的字体大小
          'figure.titlesize': large}  # 整个画布的标题字体大小
plt.rcParams.update(params)  # 设定各种默认属性
plt.style.use('seaborn-whitegrid')  # 设置整体风格
sns.set_style('white')  # 设置整体背景风格

# 准备标签列表与颜色列表
categories = np.unique(midwest['category'])
colors = [plt.cm.tab10(i / float(len(categories) - 1)) for i in range(len(categories))]

# 布置画布
fig = plt.figure(figsize=(14, 8), dpi=120, facecolor='w', edgecolor='k')

for i, category in enumerate(categories):
    plt.scatter('area', 'poptotal', data=midwest.loc[midwest.category == category, :]
                , s=midwest.loc[midwest.category == category, 'percasian'] * 500  # 需要对比的属性
                , c=np.array(colors[i]).reshape(1, -1)  # 点的颜色
                , edgecolors=np.array(colors[i]).reshape(1, -1)  # 点的边缘颜色
                , label=str(category)  # 标签
                , alpha=0.7  # 透明度
                , linewidths=.5)  # 点的边缘线的宽度

# 装饰图像
plt.gca().set(xlim=(0.0, 0.12), ylim=(0, 90000),
              xlabel='Area', ylabel='Population')
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.title('Bubble Plot Encircling', fontsize=22)

lgnd = plt.legend(fontsize=12)
plt.show() # 显示图像

       •上述代码与散点图不同的只有一行: s=midwest.loc[midwest.category == category, ‘percasian’] * 500 # 需要对比的属性
选取亚洲人口作为对比属性,使用循环,切片取出属性的值
在这里插入图片描述
       •上述图片中的点的大小代表该城市亚洲人口的多少,并与我们的散点图进行联系

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐