100天精通Python(可视化篇)——第85天:matplotlib绘制不同种类炫酷气泡图参数说明+代码实战(网格、自定义颜色、钟型、交互、打卡、动态气泡图)

news2025/2/23 6:55:00

文章目录

  • 专栏导读
  • 1. 气泡图介绍
    • 1)介绍
    • 2)参数说明
  • 2. 普通气泡图
  • 3. 网格气泡图
  • 4. 自定义气泡图颜色
  • 5. 不同颜色气泡图
  • 6. 钟型气泡图
  • 7. 交互气泡图
  • 8. 打卡气泡图
  • 9. 动态气泡图

专栏导读

🔥🔥本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html

  • 优点订阅限时9.9付费专栏进入千人全栈VIP答疑群,作者优先解答机会(代码指导、远程服务),群里大佬众多可以抱团取暖(大厂内推机会)
  • 专栏福利简历指导、招聘内推、每周送实体书、80G全栈学习视频、300本IT电子书:Python、Java、前端、大数据、数据库、算法、爬虫、数据分析、机器学习、面试题库等等
    在这里插入图片描述
    在这里插入图片描述

1. 气泡图介绍

1)介绍

  • 气泡图(Bubble Chart)是一种常用的散点图表,用于显示多个数据集之间的相互关系,每一个数据集都用一个圆(气泡)来表示,气泡的大小代表数据之间的比较。它还支持修饰符号以表示特定的分组,但这些修饰符号并不支持大小的排序。
  • 气泡图是散点图的改进版本。在散点图中,有两个维度 x 和 y。在气泡图中,存在三个维度 x、y 和 z。其中第三维 z 表示权重。这样,气泡图比二维散点图在视觉上提供了更多信息。

在这里插入图片描述

特点

  • 可以有效地同时显示多个变量的关系,显示气泡的数量可以丰富图表的信息量。

  • 适用于研究变量间复杂的多元关系的场景,因为它可以同时表示多个变量的关系。

  • 可以用来比较单独的数据点之间的关系,наглядно и в короткое время 。

应用场景

  • 适用于展示不同指标之间的关系,在比较多个变量时用它可以更加直观地看出每个变量的大小和它们之间的关系。

  • 可以用于衡量政府投资效率,以确定分配资源的最佳方案。

  • 也可以用于比较市场上不同公司的产品,用于研究产品的性价比,以及衡量市场上的相关性。

2)参数说明

matplotlib绘制气泡图的函数和散点图一样都是scatter(),以下是函数代码和参数说明大全:

import matplotlib.pyplot as plt

plt.scatter(x,
            y,
            s=None,
            c=None,
            marker=None,
            cmap=None,
            norm=None,
            vmin=None,
            vmax=None,
            alpha=None,
            linewidths=None,
            edgecolors=None,
            plotnonfinite=False,
            data=None,
            **kwargs
            )

参数说明

x, y:散点图的x和y坐标数据,可以是数组、列表或者Series类型。

s:散点的大小。可以是一个标量,也可以是与x、y等长度相���的数组。

c:散点的颜色。可以是一个表示颜色的字符串,也可以是一个与x、y等长度相同的数组。

marker:散点的形状。可以是一个表示形状的字符串,例如'o'、'+'、'x'等,也可以是一个自定义的MarkerStyle对象。

cmap:颜色映射。如果c参数是一个数组,则可以使用cmap参数指定颜色映射,例如'viridis'、'cool'等。

norm:颜色映射的归一化方式。可以是matplotlib.colors.Normalize对象,也可以是自定义的归一化函数。

vmin, vmax:颜色映射的最小值和最大值。

alpha:散点的透明度。可以是一个标量,也可以是与x、y等长度相同的数组。

linewidths:散点的边框宽度。

edgecolors:散点的边框颜色。

label:散点的标签,用于在图例中显示。

zorder:散点的层级,用于控制散点的绘制顺序。

hatch:散点的填充样式。

picker:指定散点的选中方式,例如'pick_event'表示使用pick事件选中散点。

plotnonfinite:指定是否绘制非有限数据。

data:散点的数据源。

**kwargs:其他可选参数,例如color、size、facecolors等。

以上是scatter()函数的参数说明,可以根据需要灵活使用。

2. 普通气泡图

气泡图是一种散点图,其中每个数据点用一个圆圈表示,并且圆圈的大小表示第三个变量的值。气泡图通常用于显示多个变量之间的关系。我们使用 NumPy 库生成了三个长度为 50 的随机数组 x、y 和 z,其中 z 表示圆圈的大小。然后,我们使用 scatter() 函数绘制气泡图,并将 z 用作圆圈的大小。最后,我们使用 show() 函数显示图像。

import matplotlib.pyplot as plt
import numpy as np

# 生成数据
x = np.random.rand(50)
y = np.random.rand(50)
z = np.random.rand(50) * 1000

# 绘制气泡图
plt.scatter(x, y, s=z)

# 显示图像
plt.show()

运行结果
在这里插入图片描述

3. 网格气泡图

网格气泡图是一种在气泡图上添加网格线的可视化方式。它可以帮助读者更清晰地看到数据的趋势和变化,同时也可以帮助读者更准确地读取数据。网格折线图通常用于展示时间序列数据或其他连续变量的趋势。在网格折线图中,横轴通常表示时间或其他连续变量,纵轴表示数据的值。通过添加网格线,可以更清晰地看到数据的变化和趋势,同时也可以更准确地读取数据。

通过设置网格:plt.grid(alph=0.4),alph=0.4表示设置透明度,也可以省略不设置

import matplotlib.pyplot as plt
import numpy as np

# 生成数据
x = np.random.rand(50)
y = np.random.rand(50)
z = np.random.rand(50) * 1000

# 绘制气泡图
plt.scatter(x, y, s=z)

# 设置网格
plt.grid()

# 显示图像
plt.show()

运行结果
在这里插入图片描述

4. 自定义气泡图颜色

通过设置color=‘’参数来设置气泡图的颜色:

  • red: 红色
  • green: 绿色
  • blue: 蓝色
  • purple: 紫色
  • orange: 橙色
  • yellow: 黄色
  • pink: 粉色
  • gray: 灰色
  • white: 白色
  • black: 黑色
import matplotlib.pyplot as plt
import numpy as np

# 生成数据
x = np.random.rand(50)
y = np.random.rand(50)
z = np.random.rand(50) * 1000

# 绘制气泡图,设置为橙色
plt.scatter(x, y, s=z, color='orange')

# 设置网格
plt.grid()

# 显示图像
plt.show()

运行结果
在这里插入图片描述

5. 不同颜色气泡图

通过参数ccmap配合使用,绘制出不同颜色气泡图:

  • c:散点的颜色。可以是一个表示颜色的字符串,也可以是一个与x、y等长度相同的数组。
  • cmap:颜色映射。如果c参数是一个数组,则可以使用cmap参数指定颜色映射,例如’viridis’、'cool’等。
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

# 防止乱码
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False

# 生成随机数据
a = np.random.randn(100)
b = np.random.randn(100)

# 绘制气泡图,colormap:RdYlBu
plt.scatter(a,b,s=np.power(10*a+20*b,2), c=np.random.rand(100), cmap=mpl.cm.RdYlBu,)

# 设置网格
plt.grid()

# 显示图像
plt.show()

运行结果
在这里插入图片描述

6. 钟型气泡图

该代码使用numpy库生成了150个随机的极坐标点,其中极径的范围在[0,2)之间,极角的范围在[0,2pi)之间。点的大小和颜色与极径和极角成正比。然后使用matplotlib库的subplot函数创建了一个极坐标子图,并使用scatter函数绘制了极坐标散点图。其中,cmap参数指定了使用的颜色映射,alpha参数指定了点的透明度。最后调用show函数显示图形。

该代码主要用于展示极坐标散点图的绘制方法,可以用于展示数据的分布情况,如在天文学中展示恒星的位置和亮度。

import numpy as np
import matplotlib.pyplot as plt

# 设定随机数种子,保证每次运行的结果相同
np.random.seed(19680801)

# 生成随机数据
N = 150  # 数据点个数
r = 2 * np.random.rand(N)  # 极径,范围在[0,2)之间
theta = 2 * np.pi * np.random.rand(N)  # 极角,范围在[0,2pi)之间
area = 200 * r**2  # 点的面积,与极径平方成正比
colors = theta  # 颜色,与极角成正比

# 创建画布和子图
fig = plt.figure()
ax = fig.add_subplot(projection='polar')

# 绘制极坐标散点图
c = ax.scatter(theta, r, c=colors, s=area, cmap='hsv', alpha=0.75)

# 显示图形
plt.show()

运行结果
在这里插入图片描述

7. 交互气泡图

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
np.random.seed(123)
n = 100
x = np.random.rand(n)
y = np.random.rand(n)
colors = np.random.rand(n)
sizes = np.random.randint(50, 500, n)

# 绘制气泡图
fig, ax = plt.subplots()
scatter = ax.scatter(x, y, c=colors, s=sizes, alpha=0.5)

# 添加颜色条
plt.colorbar(scatter)

# 添加交互功能
annot = ax.annotate("", xy=(0,0), xytext=(20,20),textcoords="offset points",
                    bbox=dict(boxstyle="round", fc="w"),
                    arrowprops=dict(arrowstyle="->"))
annot.set_visible(False)

def update_annot(ind):
    pos = scatter.get_offsets()[ind["ind"][0]]
    annot.xy = pos
    text = "{}".format(" ".join(list(map(str,ind["ind"]))))
    annot.set_text(text)

def hover(event):
    vis = annot.get_visible()
    if event.inaxes == ax:
        cont, ind = scatter.contains(event)
        if cont:
            update_annot(ind)
            annot.set_visible(True)
            fig.canvas.draw_idle()
        else:
            if vis:
                annot.set_visible(False)
                fig.canvas.draw_idle()

fig.canvas.mpl_connect("motion_notify_event", hover)

plt.show()

代码说明

生成随机数据:使用numpy库生成100个随机数作为x和y轴的坐标,另外生成100个随机数作为颜色和大小的参数。
绘制气泡图:使用ax.scatter()函数绘制气泡图,并将颜色和大小参数传递给c和s参数。
添加颜色条:使用plt.colorbar()函数添加颜色条。
添加交互功能:使用ax.annotate()函数添加注释,当鼠标悬停在气泡上时,注释会显示气泡的索引号。使用ax.scatter().contains()函数检查鼠标是否在气泡上,并使用update_annot()函数更新注释内容。最后使用fig.canvas.mpl_connect()函数将hover()函数与figure的motion_notify_event事件连接起来,以实现交互功能。

运行结果:移动鼠标会有交互效果
在这里插入图片描述

8. 打卡气泡图

在此示例中,我们使用scatter()方法绘制散点图和add_patch()方法绘制气泡图。同时,我们使用set_xticks()和set_yticks()方法设置坐标轴刻度,使用set_xlim()和set_ylim()方法设置坐标轴范围。

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.patches import Circle

# 创建数据
data = {
    'Weekday': [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7],
    'Hour': [8, 12, 18, 9, 12, 20, 8, 12, 18, 9, 12, 20, 8, 12, 18, 9, 12, 20, 8, 12, 18],
    'Count': [5, 7, 8, 4, 6, 9, 6, 7, 8, 5, 6, 7, 3, 4, 5, 4, 5, 7, 2, 3, 5]
}
data = pd.DataFrame(data)

# 创建画布和子图
fig, ax = plt.subplots()

# 绘制散点图
ax.scatter(data['Weekday'], data['Hour'], s=data['Count']*10, alpha=0.5, color='blue')

# 绘制气泡图
for i in range(len(data)):
    ax.add_patch(Circle(xy=(data.iloc[i]['Weekday'], data.iloc[i]['Hour']), radius=data.iloc[i]['Count']*0.1, alpha=0.5, color='blue'))

# 设置坐标轴标签和范围
ax.set_xlabel('Weekday')
ax.set_ylabel('Hour')
ax.set_xticks([1, 2, 3, 4, 5, 6, 7])
ax.set_yticks([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23])
ax.set_xlim([0.5, 7.5])
ax.set_ylim([-0.5, 23.5])

# 显示图像
plt.show()

代码说明

创建数据,数据包括星期几、几点钟和打卡次数。
创建画布和子图,使用scatter()方法绘制散点图。
使用add_patch()方法绘制气泡图,其中xy参数表示气泡中心点坐标,radius参数表示气泡半径,alpha参数表示气泡透明度,color参数表示气泡颜色。
设置坐标轴标签和范围,使用set_xticks()和set_yticks()方法设置坐标轴刻度,使用set_xlim()和set_ylim()方法设置坐标轴范围。
显示图像。

运行结果
在这里插入图片描述

9. 动态气泡图

数据集其中包含每个国家/地区不同时间的收入和预期生命周期:https://download.csdn.net/download/yuan2019035055/87720146

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.animation import FuncAnimation

# 读取数据
gapminder_df = pd.read_csv(r'C:\Users\data.csv')

# 初始化图像
fig, ax = plt.subplots(figsize = (12, 7))

# 定义更新函数
def animate(i):
    ax.cla() # 清除当前图形
    year = 1800 + i # 计算当前年份
    # 绘制气泡图
    sns.scatterplot(x = 'Income', # x轴数据
                    y = 'Life Expectancy', # y轴数据
                    size = 'Population', # 气泡大小
                    data = gapminder_df[gapminder_df['Year'] == year], # 数据集
                    hue = 'Region', # 按区域着色
                    ax = ax, # 指定子图
                    alpha = 0.7, # 设置透明度
                    sizes = (50, 3000)) # 设置气泡大小范围
    ax.set_title(f'Year {year}') # 设置标题
    ax.set_xscale('log') # 设置x轴为对数坐标轴
    ax.set_ylim(25, 90) # 设置y轴范围
    ax.set_xlim(100, 100000) # 设置x轴范围
    handles, labels = ax.get_legend_handles_labels() # 获取图例句柄和标签
    ax.legend(handles[:5], labels[:5], loc = 'upper left') # 设置图例

# 创建动画对象
ani = FuncAnimation(fig = fig, func = animate, frames = 220, interval = 100)

# 显示动画
plt.show()

解释说明

导入必要的库,包括pandas、matplotlib.pyplot、seaborn和matplotlib.animation。

读取数据,使用pandas的read_csv()函数读取数据文件。

初始化图像,创建一个子图,指定图像大小。

定义更新函数,接收一个参数i,表示当前帧数。在每一帧中,清除当前图形,计算当前年份,绘制气泡图,设置标题、坐标轴和图例。

创建动画对象,使用FuncAnimation()函数创建一个动画对象,指定更新函数、帧数和帧间隔。

显示动画,使用show()函数显示动画。

运行结果
在这里插入图片描述

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

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

相关文章

实战打靶集锦-020-Tre

提示:本文记录了博主一次艰难又失败的提权经历 目录 1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查4.1 Apache探查4.1.1 adminer.php4.1.2 /cms/目录4.1.3 /info.php页面4.1.4 nikto扫描4.1.5 dirb扫描4.1.6 登录Adminer 5. 提权5.1 系统信息枚举5.2 定时任务枚举5…

SocketTools 11在所有HTTP客户端组件支持

SocketTools 11在所有HTTP客户端组件支持 在所有HTTP客户端组件中添加了对HTTP/2.0协议的支持。 更新了TLS 1.2(及更高版本)和SSH 2.0的安全选项,以使用Microsoft Windows 11和Windows Server 2022中提供的密码套件。较旧、安全性较低的密码套件已被弃用&#xff0…

21级计组硬件实验三-八位串行加法器验证

问题1: 小明同学正在做【半加器、全加器与八位串行加法器实验】,他画好了电路图,但还有不少困难,现在他求助于你,请你帮他解决。 答:选A 注释:A是与门,B是或门,C是同…

【cmake】cmake 实现交叉编译

在PC上开发时,我们可以直接在PC端编译、链接、运行,但是到了嵌入式环境,由于嵌入式的设备资源(CPU、RAM)无法和PC端相比,如果项目比较复杂,很难甚至不可能在设备上编译。因此,我们一…

vue diff算法与虚拟dom知识整理(9) 手写patch递归子节点上树,用自己写的patch实现虚拟节点替换

上文 我们做到让一个文字虚拟节点上树 但子节点显然还 没有完成 那这次我们继续 递归的话 我们需要换个思路 我们将 src下的入口文件 index.js代码改成这样 import h from "./snabbdom/h"; import patch from "./snabbdom/patch";const container docum…

Apache Zeppelin系列教程第七篇——运行paragraph的整个流程分析

Zeppelin运行paragraph的整个流程分析 前文分别讲述了,JdbcInterpreter、Interpreter、Zengine的流程,本文来主要串联起来paragraph的整个流程 前端 首先前端部分点运行的时候是通过websocket向后端发送请求的zeppelin-web/src/components/websocket/…

swp协议-1

Swp接口是UICC和CLF(非接前端)之间的面向比特流,点到点通信的协议。CLF是主设备(master),UICC是从设备(slave)。图SWP数据传输虽然是单线协议,但是是全双工数字传输。 1 …

电商项目之海量操作日志的实现

文章目录 1 问题背景2 前言3 思考4 解决思路5 交互6 工作原理7 伪代码实现7.1 安装并配置Canal Server7.2 Canal客户端拉取MQ消息7.3 Canal数据的转换7.4 定制自己的业务逻辑 1 问题背景 有时候客户做了某些操作却不认账,咱们又拿不出证据;有时候客户将账…

入参校验1

文章目录 一、简介1、快速失败(Fail Fast) 二、单字段类入参校验三、JSON实体类校验1、注解解析2、案例1、简单校验2、分组校验3、嵌套校验4、集合校验5、自定义校验 四、相关1、源码文件2、参考地址 一、简介 1、快速失败(Fail Fast) Spring Validation 默认会校验完所有字段…

GPT-4的免费使用方法分享(续)

GPT-4的免费使用方法分享_我爱OJ的博客-CSDN博客 在这篇博客里,我介绍了一些ChatGPT的一些使用方法,但可能有一定的缺陷,有的需要魔法,所以,今天我就来亲测一下,关于ChatGPT的一些免费使用技巧 目录 镜像…

代码随想录算法训练营第九天|KMP算法

记录一下KMP算法,本文摘录自《代码随想录》和部分b站视频帮你把KMP算法学个通透!(理论篇)_哔哩哔哩_bilibili最浅显易懂的 KMP 算法讲解_哔哩哔哩_bilibiliKMP字符串匹配算法2_哔哩哔哩_bilibili KMP算法 主要应用:字…

牛客小白月赛65

题目链接 牛客小白月赛65 A-牛牛去购物(枚举)B-牛牛写情书(字符串)C-牛牛排队伍(模拟)D-牛牛取石子(博弈)E-牛牛的构造(构造,思维) A-牛牛去购物…

怎么免费使用 ChatGpt,实用!

最近发现了一个可以免费、轻松使用 ChatGpt 的方法,随即做个记录,留着备忘,以后想用也能随时找到方法。 但是不保证该方法永远有效,仅当下有限,做个记录罢了。 因为我使用的是 windows 自带的浏览器 Microsoft Edge &a…

Android--刷机与adb

目录 一、Android设备启动流程 二、刷机模式介绍 三、Windows命令行 四、adb介绍与配置 五、常用的adb命令 一、Android设备启动流程 Android就是Linux内核(Kernel)Java虚拟机(JVM) Android设备启动就分为两个阶段: Linux启动 1.启动电源以及系统启动&#…

详解c++STL—容器list

目录 1、list基本概念 1.1、概念描述 1.2、结点的组成 1.3、list的优点 1.4、list的缺点 1.5、总结 2、list构造函数 2.1、功能描述 2.2、函数原型 2.3、示例 3、list赋值和交换 3.1、功能描述 3.2、函数原型 3.3、示例 4、list大小操作 4.1、功能描述 4.2、函…

ChatGPT的前世今生——混沌初开

目录 ChatGPT的前世今生——混沌初开ChatCPT简介ChatCPT是什么?ChatCPT的火爆程度ChatCPT火爆的原因1、功能强大,应用范围广泛2、训练数据量大,模型效果好3、优秀的商业模式 OpenAI公司公司创始团队 总结公众号文章链接参考链接: …

03C++类与对象之运算符重载

文章目录 C类与对象之运算符重载与const成员运算符重载赋值运算符重载运算符重载 日期类的实现与运算符重载赋值运算符重载比较类运算符的重载二元运算符-的重载前置和后置重载 总体实现代码const成员const的好处1.防止程序员犯错2.提高代码的复用性 const 成员与函数重载规则 …

Qt文件系统源码分析—第三篇QDir

深度 本文主要分析Windows平台,Mac、Linux暂不涉及 本文只分析到Win32 API/Windows Com组件/STL库函数层次,再下层代码不做探究 本文QT版本5.15.2 类关系图 QTemporaryFile继承QFile QFile、QSaveFile继承QFileDevice QFileDevice继承QIODevice Q…

由浅入深Netty基础知识IO相关

目录 1 stream vs channel2 IO 模型3 零拷贝3.1 传统 IO 问题3.2 NIO 优化 4 AIO4.1 文件 AIO4.2 守护线程4.3 网络 AIO 1 stream vs channel stream 不会自动缓冲数据,channel 会利用系统提供的发送缓冲区、接收缓冲区(更为底层)stream 仅支…

unity学习遇到的问题:解决VS不能加载Unity脚本,MonoBehaviour是灰色的

电脑出了点问题,然后就重装了,重装之后,从gitee上下载了原来的半截代码,结果发现里面的脚本运行出问题了,仔细一看,MonoBehaviour是灰色的,也就是说,加载不了unity的api了&#xff0…