前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Matplotlib可视化50图:气泡图(2)

Matplotlib可视化50图:气泡图(2)

作者头像
数据科学工厂
发布2023-02-27 13:04:29
1.3K0
发布2023-02-27 13:04:29
举报
文章被收录于专栏:数据科学(冷冻工厂)

导读

本文[1]将学习如何使用 PythonMatplotlib 库通过示例绘制气泡图。

简介

气泡图是散点图的改进版本。在散点图中,有两个维度 x 和 y。在气泡图中,存在三个维度 x、y 和 z。其中第三维 z 表示权重。这样,气泡图比二维散点图在视觉上提供了更多信息。

数据准备

对于本教程,我将使用包含加拿大移民信息的数据集。它拥有从 1980 年到 2013 年的数据,其中包括来自 195 个国家/地区的移民人数。导入必要的包和数据集:

代码语言:javascript
复制
import numpy as np  
import pandas as pd 
df = pd.read_excel('https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/DV0101EN/labs/Data_Files/Canada.xlsx',
                       sheet_name='Canada by Citizenship',
                       skiprows=range(20),
                       skipfooter=2)

数据集太大。所以,我不能在这里显示完整截图。让我们看看列的名称。

dataset

我们不会使用很多列。我只是删除了这些列并将国家名称(“OdName”)设置为索引。

代码语言:javascript
复制
df = df.drop(columns = ['Type', 'Coverage', 'AREA', 'AreaName',      'REG', 'RegName', 'DEV', 'DevName',]).set_index('OdName')
df.head()

example

我为这个练习选择了爱尔兰和巴西的数据。没有特殊原因。我随机选择了它们。

代码语言:javascript
复制
Ireland = df.loc['Ireland']
Brazil = df.loc['Brazil']

归一化

有几种不同的方法可以归一化数据。我们将数据归一化以使数据处于相似的范围内。爱尔兰和巴西的移民数据有不同的范围。我需要将它们调整到 0 到 1 的范围内。我只是将爱尔兰数据除以爱尔兰数据系列的最大值。我对巴西的数据系列做了同样的事情。

代码语言:javascript
复制
i_normal = Ireland / Ireland.max()
b_normal = Brazil / Brazil.max()

我们将根据年份绘制爱尔兰和巴西的数据。将年份列在清单上会很有用。

代码语言:javascript
复制
years = list(range(1980, 2014))

可视化

为了看看区别,让我们先绘制散点图。

代码语言:javascript
复制
import matplotlib.pyplot as plt
plt.figure(figsize=(14, 8))
plt.scatter(years, Ireland, color='blue')
plt.scatter(years, Brazil, color='orange')
plt.xlabel("Years", size=14)
plt.ylabel("Number of immigrants", size=14)
plt.show()

scatter

现在,绘制气泡图。我们必须输入我们之前定义的尺寸。

代码语言:javascript
复制
plt.figure(figsize=(12, 8))
plt.scatter(years, Brazil, 
                  color='darkblue', 
                 alpha=0.5,
                 s = b_normal * 2000)
plt.scatter(years, Ireland, 
                  color='purple', 
                 alpha=0.5,
                 s = i_normal * 2000,
                 )
plt.xlabel("Years", size=14)
plt.ylabel("Number of immigrants", size=14)

bubble

我们可以通过气泡的大小来了解移民的数量。气泡越小,移民人数越少。

我们也可以让结果更多彩多姿。为了让它有点意义,我们需要对数据系列进行排序。您很快就会看到原因。

代码语言:javascript
复制
c_br = sorted(Brazil)
c_fr = sorted(France)

现在我们将传递这些值来改变颜色。

代码语言:javascript
复制
plt.figure(figsize=(12, 8))
plt.scatter(years, Brazil, 
                  c=c_br,
                 alpha=0.5,
                 s = b_normal * 2000)
plt.scatter(years, Ireland, 
                  c=c_fr,
                 alpha=0.5,
                 s = i_normal * 2000,
                 )
plt.xlabel("Years", size=14)
plt.ylabel("Number of immigrants", size=14)

result

现在我们添加了另一个维度,颜色。颜色随移民数量变化。但是当我们绘制两个变量时,它并没有那么好。因为在这个过程中我们没有明确定义各个变量的颜色。但是当我们在 y 轴上绘制一个变量时,它做得很好。让我们绘制每年来自巴西的移民人数,以了解多年来的趋势。

代码语言:javascript
复制
plt.figure(figsize=(12, 8))
plt.scatter(years, Brazil, 
                  c=c_br,
                 alpha=0.5,
                 s = b_normal * 2000)
plt.xlabel("Years", size=14)
plt.ylabel("Number of immigrants of Brazil", size=14)

color


参考资料

[1]

Source: https://towardsdatascience.com/bubble-plots-in-matplotlib-3f0b3927d8f9

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 冷冻工厂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导读
  • 简介
  • 数据准备
  • 归一化
  • 可视化
    • 参考资料
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档