当前位置: 首页 > news >正文

探索 Plotly:一个强大的交互式数据可视化库

探索 Plotly:一个强大的交互式数据可视化库

数据可视化是数据分析过程中不可或缺的一部分,它能帮助我们更直观地理解数据,发现数据中的趋势和规律。在众多可视化库中,Plotly 是一个非常强大的工具,它以其交互式、易用性和广泛的功能而备受欢迎。本文将为您介绍 Plotly 的核心功能及其在数据可视化中的应用。


什么是 Plotly?

Plotly 是一个基于 Python 的开源库,专注于交互式数据可视化。它的特点包括:

  • 支持多种图表类型:如折线图、柱状图、散点图、饼图、热力图、地图等。
  • 交互性强:生成的图表可以通过鼠标拖动、缩放、悬停等操作动态探索数据。
  • 可导出为 HTML:可以将交互式图表嵌入网页。
  • 易于集成:与 Pandas、NumPy 等数据处理工具无缝兼容。

安装与入门

首先,需要确保系统中安装了 Plotly:

pip install plotly

接下来,我们通过一个简单的例子来体验 Plotly 的基本用法。


创建一个简单的折线图

以下代码展示了如何用 Plotly 创建一个交互式折线图:

import plotly.graph_objects as go# 数据
x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 25, 30]# 创建图形对象
fig = go.Figure(data=go.Scatter(x=x, y=y, mode='lines+markers', name='Example Line')
)# 添加标题
fig.update_layout(title="Simple Line Chart with Plotly",xaxis_title="X Axis",yaxis_title="Y Axis"
)# 显示图表
fig.show()

执行这段代码后,你会看到一个可以缩放和悬停查看数据点的折线图。


用 Pandas 数据快速绘图

当我们处理结构化数据时,通常会用 Pandas DataFrame 作为数据源。Plotly 与 Pandas 的结合可以让绘图更加便捷。例如:

import pandas as pd
import plotly.express as px# 创建示例 DataFrame
data = {"Year": [2018, 2019, 2020, 2021],"Sales": [200, 300, 400, 500],"Profit": [50, 80, 100, 120]
}
df = pd.DataFrame(data)# 使用 Plotly Express 绘制柱状图
fig = px.bar(df,x="Year",y="Sales",color="Profit",title="Sales and Profit by Year"
)fig.show()

Plotly Express 是 Plotly 提供的一个高层 API,支持快速创建图表,非常适合用来生成简单的分析图。


高级应用:多子图布局

对于更复杂的场景,我们可能需要在同一张画布上展示多个图表。Plotly 提供了方便的子图功能:

from plotly.subplots import make_subplots# 创建一个包含两个子图的布局
fig = make_subplots(rows=1, cols=2, subplot_titles=("Line Chart", "Bar Chart"))# 添加第一个子图
fig.add_trace(go.Scatter(x=[1, 2, 3], y=[10, 20, 30], mode="lines", name="Line"),row=1, col=1
)# 添加第二个子图
fig.add_trace(go.Bar(x=["A", "B", "C"], y=[5, 15, 10], name="Bar"),row=1, col=2
)# 更新布局
fig.update_layout(title="Subplots Example")fig.show()

这段代码创建了一个包含折线图和柱状图的复合图表。


使用 Plotly 实现地图可视化

Plotly 还支持地理可视化,例如显示地理分布的散点图或热力图。以下是一个示例:

import plotly.express as px# 使用自带数据集
df = px.data.gapminder()# 绘制气泡地图
fig = px.scatter_geo(df.query("year == 2007"),locations="iso_alpha",size="pop",color="continent",hover_name="country",projection="natural earth",title="World Population in 2007"
)fig.show()

这种地图非常适合展示具有地理属性的数据。


优势与总结

Plotly 的核心优势在于:

  1. 交互性:使数据分析更加生动。
  2. 兼容性:可与 Pandas、NumPy 等数据处理库无缝协作。
  3. 跨平台性:支持在 Jupyter Notebook、网页和桌面应用中运行。

Plotly 实战:从数据分析到交互式仪表盘

理论结合实际,才能真正掌握工具的强大之处。在本节中,我们将以一个真实的数据分析任务为例,完整展示如何利用 Plotly 创建交互式图表,并最终构建一个动态仪表盘。


实战场景

假设我们拥有一个电商销售数据集,数据包括:

  • 订单日期:订单发生的时间
  • 销售额:订单的总金额
  • 类别:商品的种类
  • 地区:销售发生的地区

我们将完成以下任务:

  1. 分析每月销售趋势
  2. 比较不同类别的销售贡献
  3. 展示地区销售分布
  4. 构建交互式仪表盘

数据准备

首先,我们创建一个虚拟的数据集:

import pandas as pd
import numpy as np# 生成示例数据
np.random.seed(42)
dates = pd.date_range(start="2023-01-01", end="2023-12-31", freq="D")
data = {"Order Date": np.random.choice(dates, 500),"Sales": np.random.randint(100, 1000, size=500),"Category": np.random.choice(["Electronics", "Clothing", "Home Appliances"], 500),"Region": np.random.choice(["North", "South", "East", "West"], 500)
}
df = pd.DataFrame(data)# 确认数据结构
print(df.head())

我们将使用这个数据集完成后续可视化任务。


分析每月销售趋势

首先,计算每月的销售总额,并绘制折线图:

import plotly.express as px# 数据预处理
df['Order Date'] = pd.to_datetime(df['Order Date'])
df['Month'] = df['Order Date'].dt.to_period('M')
monthly_sales = df.groupby('Month')['Sales'].sum().reset_index()# 绘制折线图
fig = px.line(monthly_sales,x='Month',y='Sales',title='Monthly Sales Trend',labels={'Month': 'Month', 'Sales': 'Total Sales'}
)fig.update_traces(mode='lines+markers')  # 添加点标记
fig.show()

图表展示了每月销售总额的变化趋势,便于发现旺季和淡季。


比较不同类别的销售贡献

利用饼图展示不同商品类别的销售占比:

# 计算各类别销售额
category_sales = df.groupby('Category')['Sales'].sum().reset_index()# 绘制饼图
fig = px.pie(category_sales,names='Category',values='Sales',title='Sales Contribution by Category',hole=0.3  # 创建环形图
)fig.show()

饼图清晰地反映了各商品类别对总销售的贡献比例。


展示地区销售分布

用条形图展示不同地区的销售额:

# 计算各地区销售额
region_sales = df.groupby('Region')['Sales'].sum().reset_index()# 绘制柱状图
fig = px.bar(region_sales,x='Region',y='Sales',color='Region',title='Sales by Region',text='Sales'
)fig.update_layout(xaxis_title="Region", yaxis_title="Total Sales")
fig.show()

条形图显示了各地区的销售水平,为制定区域策略提供参考。


构建交互式仪表盘

将上述图表整合到一个交互式仪表盘中:

from plotly.subplots import make_subplots
import plotly.graph_objects as go# 创建子图布局
fig = make_subplots(rows=2, cols=2,specs=[[{"type": "xy"}, {"type": "domain"}], [{"type": "xy"}, None]],subplot_titles=("Monthly Sales Trend", "Sales by Category", "Sales by Region")
)# 子图1:折线图 - 月销售趋势
fig.add_trace(go.Scatter(x=monthly_sales['Month'].astype(str), y=monthly_sales['Sales'], mode='lines+markers', name="Monthly Sales"),row=1, col=1
)# 子图2:饼图 - 类别销售占比
fig.add_trace(go.Pie(labels=category_sales['Category'], values=category_sales['Sales'], hole=0.3, name="Category Sales"),row=1, col=2
)# 子图3:柱状图 - 区域销售分布
fig.add_trace(go.Bar(x=region_sales['Region'], y=region_sales['Sales'], name="Region Sales"),row=2, col=1
)# 更新布局
fig.update_layout(title="Interactive Sales Dashboard",showlegend=False,height=800
)fig.show()

总结

通过以上步骤,我们利用 Plotly 完成了从单图表绘制到仪表盘构建的全过程。在实战中,Plotly 的交互性和灵活性使得它非常适合处理复杂的数据可视化需求,尤其是需要动态探索数据时。

下一步,您可以尝试:

  1. 将数据动态更新,构建实时仪表盘。
  2. 添加下拉菜单或滑块,实现数据过滤和交互功能。
  3. 将图表导出为 HTML 嵌入到您的报告或网页中。

Plotly 是数据分析师和工程师不可或缺的工具,赶快动手试试吧!

相关文章:

探索 Plotly:一个强大的交互式数据可视化库

探索 Plotly:一个强大的交互式数据可视化库 数据可视化是数据分析过程中不可或缺的一部分,它能帮助我们更直观地理解数据,发现数据中的趋势和规律。在众多可视化库中,Plotly 是一个非常强大的工具,它以其交互式、易用…...

Oracle 查询表占用空间(表大小)的方法

目录 概述方法一:使用 dbms_space 包方法二:查询 dba_extents 视图方法三:查询 dba_segments 视图总结 1. 概述 在Oracle数据库管理中,了解特定表或索引所占用的空间对于性能调优、存储规划以及资源分配至关重要。本文档介绍了三…...

机器人国际会议IROS论文latex模板

机器人国际会议IROS论文latex模板 文档 root.tex 可以配置为 US Letter 纸或 A4。请注意以下重要行:\documentclass[letterpaper, 10 pt, Conference]{ieeeconf} % 如果需要 a4paper,请注释掉此行%\documentclass[a4paper, 10pt, Conference]{ieeeconf} …...

雪泥鸿爪和屈指可数

paw这个单词,表示“爪或手”,是一个和hoof相对的单词: hoof n.(马等动物的)蹄paw n.爪子;(动物的)爪;(人的)手 v.挠,抓;动手动脚 所以,当你理解了 paw 和 hoof 是相对的概念时&…...

2024年度个人总结

一转眼已经2024年度最后一个月了,今年基本没有在CSDN发布内容,包括其他平台(B站),倒是在其他地方(我的个人网站和V2EX)发布一些零碎的东西,主要是因为今年换了工作后太累了&#xff…...

ChatGPT接口测试用例生成的流程

通常,使用ChatGPT生成接口测试用例的流程可以分为以下关键步骤。 收集接口信息 收集接口的相关文档和信息,如接口名称、请求方法、请求参数、返回结果等。这些是ChatGPT生成测试用例需要的输入信息。 这一步骤的重要性不可忽视,因为它为Chat…...

【读书笔记】《论语别裁》真人和假人

一、内容摘要 在《论语别裁》第01章中,作者探讨了“真人”与“假人”的概念,借鉴于庄子的思想,强调真正有道德修养且懂得人生真谛的人被称为“真人”,而那些未达到道德最高标准的人则称为“假人。孔子所提倡的“学”不仅仅是书本…...

JS字符串方法汇总

String.anchor //创建一个带有名称的 <a> 元素字符串 //已弃用 let str test str.anchor(name) //<a name"name">test</a>String.at let str 1234567 str.at(0) //1 str.at(1) //2 str.at(-1) //7 str.at(-2) //6String.big //已弃用 let …...

CentOs7使用yum安装docker

安装docker 一、安装docker依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm2二、添加软件源信息 sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sudo sed -i sdownload.docker.commirrors.…...

蓝桥杯刷题——day8

蓝桥杯刷题——day8 题目一题干解题思路代码 题目二题干解题思路代码 题目一 题干 N 架飞机准备降落到某个只有一条跑道的机场。其中第i架飞机在 Ti时刻到达机场上空&#xff0c;到达时它的剩余油料还可以继续盘旋 Di个单位时间&#xff0c;即它最早可以于 Ti时刻开始降落&am…...

如何使用 WebAssembly 扩展后端应用

1. WebAssembly 简介 随着互联网的发展&#xff0c;越来越多的应用借助 Javascript 转到了 Web 端&#xff0c;但人们也发现&#xff0c;随着移动互联网的兴起&#xff0c;需要把大量的应用迁移到手机端&#xff0c;随着手端的应用逻辑越来越复杂&#xff0c;Javascript 的解析…...

BaseCTF_web_week3

复读机 输入的东西会在下方显示出来&#xff0c;wp说是简单的SSTI&#xff0c;这里来学习一下SSTI SSTI模板注入 根据My4n师傅的《超详细SSTI模板注入漏洞原理讲解_ssti注入-CSDN博客》写的 用户的输入返回时会经过一个模板渲染&#xff0c;SSTI漏洞就是用户插入了可以破坏模板…...

模型数据算法概论

模型数据算法是一类使用数据来构建、优化或训练数学模型的算法&#xff0c;常用于数据科学、机器学习和人工智能领域。它们的核心目标是从数据中提取模式或关系&#xff0c;以便在预测、分类或优化任务中应用。以下是一个简要的概述&#xff1a; 1. 模型 模型是用来描述数据特…...

什么是3DEXPERIENCE SOLIDWORKS,它有哪些角色和功能?

将业界领先的 SOLIDWORKS 3D CAD 解决方案连接到基于单一云端产品开发环境 3DEXPERIENCE 平台。您的团队、数据和流程全部连接到一个平台进行高效的协作工作&#xff0c;从而能快速的做出更好的决策。 目 录&#xff1a; ★ 1 什么是3DEXPERIENCE SOLIDWORKS ★ 2 3DEXPERIE…...

Sigrity System SI Parallel Bus Analysis模式进行DDR3仿真分析-传输线模型

Sigrity System SI Parallel Bus Analysis模式进行DDR3仿真分析-传输线模型 Sigrity System SI Parallel Bus Analysis模式提供了简易的已搭建好的模板,方便用户直接在模板上替换数据文件进行仿真分析,下面介绍pba_simple_em模板的使用,具体操作如下 双击启动System SI启动界…...

MacOS下PostIn安装配置指南

PostIn是一款开源免费的接口管理工具&#xff0c; 下面介绍私有部署版本的MacOS下安装与配置。私有部署版本更适合有严格数据安全要求的企业&#xff0c;实现对数据和系统的完全控制。 &#xfeff; &#xfeff; 1、MacOS服务端安装 Mac安装包下载地址&#xff1a;下载Mac安…...

【Leetcode 每日一题】2545. 根据第 K 场考试的分数排序

问题背景 班里有 m m m 位学生&#xff0c;共计划组织 n n n 场考试。给你一个下标从 0 0 0 开始、大小为 m n m \times n mn 的整数矩阵 s c o r e score score&#xff0c;其中每一行对应一位学生&#xff0c;而 s c o r e [ i ] [ j ] score[i][j] score[i][j] 表示…...

一文速通 IIC I2C子系统驱动 通信协议原理 硬件 时序 深度剖析

本文作为一个引入&#xff0c;作用是让读者理解熟知IIC协议关键内容&#xff0c;结合实际手册内容&#xff0c;深度解析协议本质&#xff0c;作为后续嵌入式linux驱动IIC子系统的一个铺垫。 目录 1. 硬件连接 2. IIC传输时序 2.1.写操作 2.2.读操作 2.3.I2C信号 3.IIC协议…...

HarmonyOS(72)事件拦截处理详解

事件拦截 1、参考资料2、HitTestMode3、onTouchIntercept、onTouch、onClick事件执行顺序3.1、系统默认事件传递顺序3.2、子组件拦截事件1、参考资料 HarmonyOS(71) 自定义事件分发之TouchTestStrategy使用说明HarmonyOS(70) ArkUI 事件分发拦截,事件冲突解决方案HitTestModea…...

docker(wsl)命令 帮助文档

WSL wsl使用教程 wsl -l -v 列出所有已安装的 Linux 发行版 wsl -t Ubuntu-22.04 --shutdown 关闭所有正在运行的WSL发行版。如果你只想关闭特定的发行版 wsl -d Ubuntu-22.04 登录到Ubuntu环境 wsl --list --running 查看正在wsl中运行的linux发行版 wsl --unregister (系统名…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...