『Plotly实战指南』--散点图绘制进阶篇
在数据分析的世界里,散点图是一种极为重要的可视化工具。
它能够直观地展示两个或多个变量之间的关系,帮助我们快速发现数据中的模式、趋势和异常点。
无论是探索变量之间的相关性,还是寻找数据中的潜在规律,散点图都扮演着不可或缺的角色。
与传统的静态图表不同,Plotly
绘制的散点图可以通过鼠标悬停、缩放和拖动等交互操作,让用户更深入地探索数据细节。
本文旨在探讨使用 Plotly
绘制散点图的高级技巧,包括多变量散点图的绘制、趋势分析方法的应用,以及如何通过这些技巧提升数据分析与可视化的能力。
1. 多变量散点图
1.1. 气泡图
气泡图是一种扩展的散点图,通过引入第三个维度(通常是气泡的大小或颜色)来表示额外的信息,适用于展示三个或更多变量之间的关系。
绘制气泡图时,除了基本的 x
、y
轴数据外,还需要定义气泡的大小(通常通过 size
参数)和颜色(通过 color
参数)。
这样,气泡图可以在二维图表中同时表达4个属性。
import plotly.express as px
import pandas as pd
# 示例数据
data = pd.DataFrame(
{
"x": [1, 2, 3, 4, 5],
"y": [10, 11, 12, 13, 14],
"size": [10, 20, 30, 40, 50],
"color": ["A", "B", "A", "B", "A"],
}
)
fig = px.scatter(
data,
x="x",
y="y",
size="size",
color="color",
hover_name="color",
log_x=True,
size_max=60,
)
fig.show()
还可以通过调整颜色映射、气泡大小范围、添加标签等方式来美化气泡图,使其更加直观易懂。
1.2. 散点矩阵图
散点矩阵图是一种同时展示多个变量之间两两关系的图表,它将多个散点图排列成矩阵形式,每个单元格展示一对变量之间的散点图。
这种图表非常适合探索多变量数据之间的相关性,帮助我们快速发现变量之间的线性或非线性关系。
下面的示例中我们使用Plotly中自带的鸢尾花数据集,通过散点矩阵图可同时观察:
- 花瓣长度与宽度的相关性
- 不同花种在各维度的分布差异
import plotly.express as px
import plotly.figure_factory as ff
df = px.data.iris()
fig = ff.create_scatterplotmatrix(
df,
diag="histogram",
colormap="Viridis", # 对角线显示直方图
width=800,
height=800,
)
fig.update_layout(title="鸢尾花特征矩阵图")
fig.show()
通过这个图,我们可以分析鸢尾花不同属性之间的关联关系。
散点矩阵图的优点在于能够同时展示多个变量之间的关系,信息量大,并且有助于快速发现变量之间的相关性。
不过,当变量数量较多时,图表可能会显得过于复杂,难以解读,这点需要注意。
而且它对于非线性关系的展示效果也有限。
2. 散点图趋势分析法
2.1. 回归分析
回归线是散点图中用于展示变量之间趋势关系的重要工具,
回归线通常是指线性回归模型的拟合线,用于量化变量之间的线性关系。
下面通过生成一些测试数据,通过线性模型训练之后,根据训练结果绘制散点数据的回归线。
import pandas as pd
import numpy as np
import plotly.graph_objects as go
from sklearn.linear_model import LinearRegression
# 生成示例数据
data = pd.DataFrame({
'x': np.linspace(0, 10, 100),
'y': 2 * np.linspace(0, 10, 100) + 3 + np.random.normal(0, 1, 100)
})
# 线性回归
# 拟合线性模型
model = LinearRegression()
model.fit(data[['x']], data['y'])
data['y_pred_linear'] = model.predict(data[['x']])
# 创建散点图
fig = go.Figure()
fig.add_trace(go.Scatter(x=data['x'], y=data['y'], mode='markers', name='原始数据'))
fig.add_trace(go.Scatter(x=data['x'], y=data['y_pred_linear'], mode='lines', name='线性回归线'))
# 显示图形
fig.show()
回归线可以很好的表达数据的变化趋势。
对于非线性的模型,也可以绘制对应的回归线,比如下面示例中采用的多项式回归模型训练,训练结果也可以绘制回归线。
import plotly.graph_objects as go
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
# 多项式回归
# 多项式特征转换
poly = PolynomialFeatures(degree=3)
X_poly = poly.fit_transform(data[['x']])
model_poly = LinearRegression()
model_poly.fit(X_poly, data['y'])
data['y_pred_poly'] = model_poly.predict(X_poly)
fig = go.Figure()
fig.add_trace(go.Scatter(x=data['x'], y=data['y'], mode='markers', name='原始数据'))
fig.add_trace(go.Scatter(x=data['x'], y=data['y_pred_linear'], mode='lines', name='线性回归线'))
fig.add_trace(go.Scatter(x=data['x'], y=data['y_pred_poly'], mode='lines', name='多项式回归线'))
# 显示图形
fig.show()
两条回归线差不多重合了。(红色是线性回归,青色的是多项式回归)
2.2. 平滑处理
平滑算法用于处理散点图中的噪声数据,使数据的趋势更加清晰,通过平滑处理,可以更好地观察数据的长期趋势,而忽略短期的波动。
常见平滑算法有移动平均(通过计算一定窗口内的平均值来平滑数据)和Savitzky-Golay 滤波(一种基于多项式拟合的平滑算法)
在Plotly
中,可以通过自定义函数或利用现有库(如 SciPy
)来实现平滑处理并绘制曲线。
import plotly.express as px
import numpy as np
from scipy.signal import savgol_filter
# 示例数据
data = px.data.gapminder().query("country=='Canada'")
y = data["gdpPercap"]
x = np.arange(len(y))
y_smooth = savgol_filter(y, window_length=7, polyorder=2)
fig = px.scatter(data, x=x, y=y)
fig.add_scatter(x=x, y=y_smooth, mode="lines", name="平滑曲线")
fig.show()
3. 总结
本文主要介绍如何使用 Plotly 绘制散点图的高级技巧,包括多变量散点图的绘制(如气泡图、散点矩阵图)和趋势分析方法(如拟合曲线、回归线、平滑算法)。
这些技巧不仅提升了数据分析的维度和深度,还通过交互式可视化增强了数据探索的效率和乐趣。
『Plotly实战指南』--散点图绘制进阶篇的更多相关文章
- 『Numpy学习指南』Matplotlib绘图
数据生成: import numpy as np import matplotlib.pyplot as plt func = np.poly1d(np.array([,,,])) func1 = f ...
- 『Numpy学习指南』排序&索引&抽取函数介绍
排序: numpy.lexsort(): numpy.lexsort()是个排字典序函数,因为很有意思,感觉也蛮有用的,所以单独列出来讲一下: 强调一点,本函数只接受一个参数! import nump ...
- Chrome开发者工具不完全指南(二、进阶篇)
上篇向大家介绍完了基础功能篇,这次分享的是Chrome开发工具中最有用的面板Sources. Sources面板几乎是我最常用到的Chrome功能面板,也是在我看来决解一般问题的主要功能面板.通常只 ...
- Apache Beam实战指南 | 大数据管道(pipeline)设计及实践
Apache Beam实战指南 | 大数据管道(pipeline)设计及实践 mp.weixin.qq.com 策划 & 审校 | Natalie作者 | 张海涛编辑 | LindaAI 前 ...
- 【阿里云产品公测】以开发者角度看ACE服务『ACE应用构建指南』
作者:阿里云用户mr_wid ,z)NKt# @I6A9do 如果感觉该评测对您有所帮助, 欢迎投票给本文: UO<claV RsfTUb)< 投票标题: 28.[阿里云 ...
- 2017-2018-2 20155303『网络对抗技术』Exp6:信息收集与漏洞扫描
2017-2018-2 20155303『网络对抗技术』 Exp6:信息收集与漏洞扫描 --------CONTENTS-------- 一.原理与实践说明 1.实践内容 2.基础问题 二.实践过程记 ...
- 2018-2019-2 20165316 『网络对抗技术』Exp3:免杀原理与实践
2018-2019-2 20165316 『网络对抗技术』Exp3:免杀原理与实践 一 免杀原理与实践说明 (一).实验说明 任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件, ...
- 2017-2018-2 20155303『网络对抗技术』Final:Web渗透获取WebShell权限
2017-2018-2 『网络对抗技术』Final:Web渗透获取WebShell权限 --------CONTENTS-------- 一.Webshell原理 1.什么是WebShell 2.We ...
- 2017-2018-2 20155303 『网络对抗技术』Exp3:免杀原理与实践
2017-2018-2 20155303 『网络对抗技术』Exp3:免杀原理与实践 --------CONTENTS-------- 1. 免杀原理与实践说明 实验说明 基础问题回答 2. 使用msf ...
- 2017-2018-2 20155303『网络对抗技术』Exp1:PC平台逆向破解
2017-2018-2 『网络对抗技术』Exp1:PC平台逆向破解 --------CONTENTS-------- 1. 逆向及Bof基础实践说明 2. 直接修改程序机器指令,改变程序执行流程 3. ...
随机推荐
- kafka介绍和使用
1 Kafka简介 Kafka是最初由Linkedin公司开发,它是一个分布式.可分区.多副本,基于zookeeper协调的分布式日志系统:常见可以用于web/nginx日志.访问日志,消息服务等等 ...
- idea+maven打包.jar发布项目
开发完项目后,idea+maven环境打包成.jar包,才能发布项目.下面记录常用的几种打包方式. 一,通过mvn命令打包 比较专业的用法是通过mvn命令打包: mvn clean package - ...
- python3 使用中的问题
gmpy2 GMP(GNU Multiple Precision Arithmetic Library,即GNU高精度算术运算库),它是一个开源的高精度运算库,其中不但有普通的整数.实数.浮点数的高精 ...
- DVR4 pg walkthrough Intermediate window
nmap ┌──(root㉿kali)-[~/lab] └─# nmap -p- -A -sS 192.168.219.179 Starting Nmap 7.94SVN ( https://nmap ...
- 从找零钱问题到三数之和:一道经典面试算法题的全面剖析|LeetCode 15 三数之和
LeetCode 15 三数之和 点此看全部题解 LeetCode必刷100题:一份来自面试官的算法地图(题解持续更新中) 生活中的算法 想象你是一个收银员,顾客给了你一张100元钱,商品只要85元. ...
- Sdcb Chats 重磅更新:深度集成 DeepSeek-R1,思维链让 AI 更透明!
Sdcb Chats 是一个强大且易于部署的 ChatGPT 前端,旨在帮助用户轻松接入和管理各种主流的大语言模型. Sdcb Chats 主要特性: 广泛的大模型支持: 已支持 15 种不同的大语言 ...
- 另辟新径实现 Blazor/MAUI 本机交互(二)
Maui 基础 Preferences 是 .NET MAUI 提供的一个静态类,用于存储和检索应用程序的首选项(即设置或配置).它提供了一种简单的键值对存储机制,可以跨平台使用.每个平台使用其本地的 ...
- Ubuntu Linux部署DeepSeek(转载用于学习)
合集 - DeepSeek(4) 1.Ubuntu Linux部署DeepSeek02-06 2.Windows11本地部署DeepSeek加速02-073.DeepSeek部署本地知识库02-084 ...
- VS Code C++ 切换配置集
前言 最近转型做Golang开发了,但有需求做视频传输,想用ffmpeg做测试,只是加点日志,方便测试,就想直接用VS Code做下开发好了,安装C/C++的插件,用MSYS2编译. 问题 C/C++ ...
- android studio真机调试华为手机
背景 近来开发一个视频通话App,需要在华为手机上调试,按网上一顿操作,开启了USB调试之后,发现手机连上电脑后,android studio没反应,在此记录下解决方法.调试的手机型号是华为 nova ...