『Plotly实战指南』--散点图绘制进阶篇

打印 上一主题 下一主题

主题 1776|帖子 1776|积分 5328

在数据分析的世界里,散点图是一种极为紧张的可视化工具。
它可以或许直观地展示两个或多个变量之间的关系,资助我们快速发现数据中的模式、趋势和异常点。
无论是探索变量之间的相关性,还是探求数据中的潜在规律,散点图都饰演着不可或缺的角色。
与传统的静态图表不同,Plotly 绘制的散点图可以通过鼠标悬停、缩放和拖动等交互操作,让用户更深入地探索数据细节。
本文旨在探讨利用 Plotly 绘制散点图的高级本领,包括多变量散点图的绘制、趋势分析方法的应用,以及怎样通过这些本领提升数据分析与可视化的能力。
1. 多变量散点图

1.1. 气泡图

气泡图是一种扩展的散点图,通过引入第三个维度(通常是气泡的巨细或颜色)来表现额外的信息,适用于展示三个或更多变量之间的关系。
绘制气泡图时,除了根本的 x、y 轴数据外,还必要定义气泡的巨细(通常通过 size 参数)和颜色(通过 color 参数)。
如许,气泡图可以在二维图表中同时表达4个属性。
  1. import plotly.express as px
  2. import pandas as pd
  3. # 示例数据
  4. data = pd.DataFrame(
  5.     {
  6.         "x": [1, 2, 3, 4, 5],
  7.         "y": [10, 11, 12, 13, 14],
  8.         "size": [10, 20, 30, 40, 50],
  9.         "color": ["A", "B", "A", "B", "A"],
  10.     }
  11. )
  12. fig = px.scatter(
  13.     data,
  14.     x="x",
  15.     y="y",
  16.     size="size",
  17.     color="color",
  18.     hover_name="color",
  19.     log_x=True,
  20.     size_max=60,
  21. )
  22. fig.show()
复制代码

还可以通过调整颜色映射、气泡巨细范围、添加标签等方式来美化气泡图,使其更加直观易懂。
1.2. 散点矩阵图

散点矩阵图是一种同时展示多个变量之间两两关系的图表,它将多个散点图排列成矩阵情势,每个单元格展示一对变量之间的散点图。
这种图表非常适合探索多变量数据之间的相关性,资助我们快速发现变量之间的线性或非线性关系。
下面的示例中我们利用Plotly中自带的鸢尾花数据集,通过散点矩阵图可同时观察:

  • 花瓣长度与宽度的相关性
  • 不同花种在各维度的分布差异
  1. import plotly.express as px
  2. import plotly.figure_factory as ff
  3. df = px.data.iris()
  4. fig = ff.create_scatterplotmatrix(
  5.     df,
  6.     diag="histogram",
  7.     colormap="Viridis",  # 对角线显示直方图
  8.     width=800,
  9.     height=800,
  10. )
  11. fig.update_layout(title="鸢尾花特征矩阵图")
  12. fig.show()
复制代码

通过这个图,我们可以分析鸢尾花不同属性之间的关联关系。
散点矩阵图的长处在于可以或许同时展示多个变量之间的关系,信息量大,并且有助于快速发现变量之间的相关性。
不过,当变量数量较多时,图表可能会显得过于复杂,难以解读,这点必要注意。
而且它对于非线性关系的展示效果也有限。
2. 散点图趋势分析法

2.1. 回归分析

回归线散点图中用于展示变量之间趋势关系的紧张工具,
回归线通常是指线性回归模型的拟合线,用于量化变量之间的线性关系。
下面通过生成一些测试数据,通过线性模型训练之后,根据训练效果绘制散点数据的回归线。
  1. import pandas as pd
  2. import numpy as np
  3. import plotly.graph_objects as go
  4. from sklearn.linear_model import LinearRegression
  5. # 生成示例数据
  6. data = pd.DataFrame({
  7.     'x': np.linspace(0, 10, 100),
  8.     'y': 2 * np.linspace(0, 10, 100) + 3 + np.random.normal(0, 1, 100)
  9. })
  10. # 线性回归
  11. # 拟合线性模型
  12. model = LinearRegression()
  13. model.fit(data[['x']], data['y'])
  14. data['y_pred_linear'] = model.predict(data[['x']])
  15. # 创建散点图
  16. fig = go.Figure()
  17. fig.add_trace(go.Scatter(x=data['x'], y=data['y'], mode='markers', name='原始数据'))
  18. fig.add_trace(go.Scatter(x=data['x'], y=data['y_pred_linear'], mode='lines', name='线性回归线'))
  19. # 显示图形
  20. fig.show()
复制代码

回归线可以很好的表达数据的变化趋势。
对于非线性的模型,也可以绘制对应的回归线,好比下面示例中采用的多项式回归模型训练,训练效果也可以绘制回归线。
  1. import plotly.graph_objects as go
  2. from sklearn.linear_model import LinearRegression
  3. from sklearn.preprocessing import PolynomialFeatures
  4. # 多项式回归
  5. # 多项式特征转换
  6. poly = PolynomialFeatures(degree=3)
  7. X_poly = poly.fit_transform(data[['x']])
  8. model_poly = LinearRegression()
  9. model_poly.fit(X_poly, data['y'])
  10. data['y_pred_poly'] = model_poly.predict(X_poly)
  11. fig = go.Figure()
  12. fig.add_trace(go.Scatter(x=data['x'], y=data['y'], mode='markers', name='原始数据'))
  13. fig.add_trace(go.Scatter(x=data['x'], y=data['y_pred_linear'], mode='lines', name='线性回归线'))
  14. fig.add_trace(go.Scatter(x=data['x'], y=data['y_pred_poly'], mode='lines', name='多项式回归线'))
  15. # 显示图形
  16. fig.show()
复制代码

两条回归线差不多重合了。(红色是线性回归,青色的是多项式回归
2.2. 平滑处理

平滑算法用于处理散点图中的噪声数据,使数据的趋势更加清楚,通过平滑处理,可以更好地观察数据的长期趋势,而忽略短期的波动。
常见平滑算法有移动平均(通过计算肯定窗口内的平均值来平滑数据)和Savitzky-Golay 滤波(一种基于多项式拟合的平滑算法)
在Plotly中,可以通过自定义函数或利用现有库(如 SciPy)来实现平滑处理并绘制曲线。
  1. import plotly.express as px
  2. import numpy as np
  3. from scipy.signal import savgol_filter
  4. # 示例数据
  5. data = px.data.gapminder().query("country=='Canada'")
  6. y = data["gdpPercap"]
  7. x = np.arange(len(y))
  8. y_smooth = savgol_filter(y, window_length=7, polyorder=2)
  9. fig = px.scatter(data, x=x, y=y)
  10. fig.add_scatter(x=x, y=y_smooth, mode="lines", name="平滑曲线")
  11. fig.show()
复制代码

3. 总结

本文主要介绍怎样利用 Plotly 绘制散点图的高级本领,包括多变量散点图的绘制(如气泡图、散点矩阵图)和趋势分析方法(如拟合曲线、回归线、平滑算法)。
这些本领不但提升了数据分析的维度和深度,还通过交互式可视化增强了数据探索的效率和乐趣。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

民工心事

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表