《Python实战进阶》No16: Plotly 交互式图表制作指南
No16: Plotly 交互式图表制作指南
Plotly是一款用来做数据分析和可视化的在线平台,功能真的是非常强大,它主要有以下特点:
- 图形多样化:在线绘制多种图形,比如柱状图、饼图、直方图、饼图、气泡图、桑基图、股票图、旭日图、联合分布图、地图等
- 在线可编辑:Plotly中有在线编辑的平台,可以将生成的图形保存到该平台,并进行分享
- 开源免费:Plotly的所有资源都是开源免费的,用户可直接使用,还可以直接和R、python、MATLAB等软件或者语言无缝对接
- 图形动态化:Plotly生成的图形全部是动态化;Plotly的绘图最好在Jupyter notebook中进行,能够很好地显示动态效果
- 颜色绚丽:在使用Plotly绘制图形的时候,我们可以进行图形颜色的设置,Plotly提供了丰富的颜色面板供选择
- 代码量少:Plotly绘图,尤其是Plotly的高级封装Plotly_Express,代码量非常少;一行代码就能实现多种功能且精美的图形
- 内置丰富数据集:在Plotly中内置7个不同类型的数据集,方便读者直接使用内置数据进行学习、使用
- 文档健全:Plotly官方提供了丰富的文档资料和案例可免费学习,能够快速的上手
- 附录:在官网中展示了Plotly能够绘制的部分图形:https://plotly.com/python/
本文将以Plotly为主介绍python中制作交互式图表的典型用法和高级技巧。

核心概念
1. 图表部件编程(updatemenus/sliders)
通过 updatemenus 和 sliders 实现动态交互功能,例如切换数据视图或调整参数。
import plotly.graph_objects as gofig = go.Figure()# 添加多条折线
fig.add_trace(go.Scatter(y=[2, 1, 3], name="Line 1"))
fig.add_trace(go.Scatter(y=[3, 2, 1], name="Line 2"))# 配置 updatemenus
fig.update_layout(updatemenus=[dict(type="buttons",direction="right",buttons=[dict(label="Show All", method="update", args=[{"visible": [True, True]}]),dict(label="Show Line 1", method="update", args=[{"visible": [True, False]}]),dict(label="Show Line 2", method="update", args=[{"visible": [False, True]}]),],)]
)fig.show()
效果:按钮组允许用户切换显示不同的折线。

2. WebGL加速的大数据渲染
Plotly 支持 WebGL 渲染,适合处理大规模数据集。
import plotly.express as px
import numpy as np# 模拟大数据
np.random.seed(42)
x = np.random.rand(100_000)
y = np.random.rand(100_000)# 使用 WebGL 加速的散点图
fig = px.scatter(x=x, y=y, render_mode='webgl', title="WebGL Accelerated Scatter Plot")
fig.show()
效果:即使数据量达到 10 万点,图表依然流畅。

3. Dash回调链设计模式
Dash 是 Plotly 的框架,用于构建交互式仪表盘。通过回调链实现复杂交互逻辑。
from dash import Dash, dcc, html, Input, Outputapp = Dash(__name__)app.layout = html.Div([dcc.Input(id="input", value="Hello Plotly!", type="text"),html.Div(id="output")
])@app.callback(Output("output", "children"), [Input("input", "value")])
def update_output(value):return f"You entered: {value}"if __name__ == "__main__":app.run_server(debug=True)
效果:输入框内容实时更新到输出区域。
4. 图表主题与模板系统
Plotly 提供丰富的主题和模板,可快速定制图表风格。
import plotly.express as pxdf = px.data.gapminder().query("continent=='Oceania'")
fig = px.line(df, x="year", y="lifeExp", color="country", template="plotly_dark")
fig.show()
效果:深色主题的折线图,适合夜间模式。

实战案例
1. 实时疫情数据仪表盘开发
结合 Dash 和 Plotly 构建实时疫情数据仪表盘。
from dash import Dash, dcc, html, Input, Output
import plotly.express as px
import pandas as pd# 模拟疫情数据
data = {"date": pd.date_range(start="2020-01-01", periods=100),"cases": [i**2 for i in range(100)],"deaths": [i * 5 for i in range(100)]
}
df = pd.DataFrame(data)app = Dash(__name__)app.layout = html.Div([dcc.Graph(id="graph"),dcc.Slider(id="year-slider",min=0,max=len(df) - 1,value=0,marks={i: str(df["date"][i].date()) for i in range(0, len(df), 10)},step=None)
])@app.callback(Output("graph", "figure"), [Input("year-slider", "value")])
def update_graph(selected_index):filtered_df = df.iloc[:selected_index + 1]fig = px.line(filtered_df, x="date", y=["cases", "deaths"], title="Covid-19 Cases Over Time")return figif __name__ == "__main__":app.run_server(debug=True)
效果:滑块控制时间轴,动态展示疫情数据变化。

2. 3D体素可视化与机器学习特征空间展示
使用 Plotly 绘制 3D 体素图,展示机器学习特征空间。
import plotly.graph_objects as go
import numpy as np# 创建 3D 体素数据
x, y, z = np.indices((8, 8, 8))
cube1 = (x < 3) & (y < 3) & (z < 3)
cube2 = (x >= 5) & (y >= 5) & (z >= 5)
voxelarray = cube1 | cube2colors = np.empty(voxelarray.shape, dtype=object)
colors[cube1] = 'blue'
colors[cube2] = 'red'# 绘制 3D 体素图
fig = go.Figure(data=go.Volume(x=x.flatten(),y=y.flatten(),z=z.flatten(),value=voxelarray.flatten(),colorscale=["blue", "red"],opacity=0.2,surface_count=17
))fig.show()
效果:3D 空间中两个立方体的体素可视化。

扩展思考
1. Plotly与Three.js的深度集成
Plotly 的底层基于 WebGL,可以与 Three.js 深度集成,用于更复杂的 3D 可视化场景。
// 示例:Three.js 与 Plotly 结合的伪代码
// 在 Three.js 场景中嵌入 Plotly 图表
2. 图表交互行为的A/B测试设计
通过 A/B 测试优化图表交互行为,提升用户体验。
# 示例:记录用户点击行为
from dash import Dash, dcc, html
import dash_bootstrap_components as dbcapp = Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP])app.layout = html.Div([dcc.Graph(id="graph", figure=px.bar(x=[1, 2, 3], y=[3, 2, 1])),html.Button("Option A", id="button-a"),html.Button("Option B", id="button-b"),html.Div(id="output")
])@app.callback(Output("output", "children"), [Input("button-a", "n_clicks"), Input("button-b", "n_clicks")])
def update_output(clicks_a, clicks_b):return f"Option A clicks: {clicks_a or 0}, Option B clicks: {clicks_b or 0}"if __name__ == "__main__":app.run_server(debug=True)
效果:记录用户对不同选项的偏好。
通过掌握这些核心概念和实战案例,您将能够创建出功能强大、交互性强的数据可视化作品。
相关文章:
《Python实战进阶》No16: Plotly 交互式图表制作指南
No16: Plotly 交互式图表制作指南 Plotly是一款用来做数据分析和可视化的在线平台,功能真的是非常强大,它主要有以下特点: 图形多样化:在线绘制多种图形,比如柱状图、饼图、直方图、饼图、气泡图、桑基图、股票图、旭…...
代码随想录算法训练营第22天 | 组合总和 分割回文串
39. 组合总和 39. 组合总和 - 力扣(LeetCode) 题目链接/文章讲解:代码随想录 视频讲解:带你学透回溯算法-组合总和(对应「leetcode」力扣题目:39.组合总和)| 回溯法精讲!_哔哩哔哩_…...
DeepSeek 医疗大模型微调实战讨论版(第一部分)
DeepSeek医疗大模型微调实战指南第一部分 DeepSeek 作为一款具有独特优势的大模型,在医疗领域展现出了巨大的应用潜力。它采用了先进的混合专家架构(MoE),能够根据输入数据的特性选择性激活部分专家,避免了不必要的计算,极大地提高了计算效率和模型精度 。这种架构使得 …...
Linux云计算SRE-第十七周
1. 做三个节点的redis集群。 1、编辑redis节点node0(10.0.0.100)、node1(10.0.0.110)、node2(10.0.0.120)的安装脚本 [rootnode0 ~]# vim install_redis.sh#!/bin/bash # 指定脚本解释器为bashREDIS_VERSIONredis-7.2.7 # 定义Redis的版本号PASSWORD123456 # 设置Redis的访问…...
lvgl在ubuntu中模拟运行
文章目录 前言具体的步骤 前言 lvgl是一个图像UI的开源框架,用于嵌入式的设备之中。 在学习lvgl时,我们最好是现在PC上模拟运行,所以我们学习lvgl的第一步可以说是在我们的电脑上搭建模拟的运行环境。 参考官方的操作 lvgl在ubuntu上模拟运…...
Unity引擎使用HybridCLR(华佗)热更新
大家好,我是阿赵。 阿赵我做手机游戏已经有十几年时间了。记得刚开始从做页游的公司转到去做手游的公司,在面试的时候很重要的一个点,就是会不会用Lua。使用Lua的原因很简单,就是为了热更新。 热更新游戏内容很重要。如果…...
【Linux】权限相关知识点
思考 我们平时使用Linux创建文件或目录时的默认权限是多少? [rootlocalhost test]# mkdir dir [rootlocalhost test]# touch file [rootlocalhost test]# ll total 0 drwxr-xr-x 2 root root 6 Mar 8 15:23 dir #755 -rw-r--r-- 1 root root 0 Mar 8 15:23 f…...
Vue项目通过内嵌iframe访问另一个vue页面,获取token适配后端鉴权(以内嵌若依项目举例)
1. 改造子Vue项目进行适配(ruoyi举例) (1) 在路由文件添加需要被外链的vue页面配置 // 若依项目的话是 router/index.js文件 {path: /contrast,component: () > import(/views/contrast/index),hidden: true },(2) 开放白名单 // 若依项目的话是 permission.js 文件 cons…...
vue3 vite项目安装eslint
npm install eslint -D 安装eslint库 npx eslint --init 初始化配置,按项目实际情况选 自动生成eslint.config.js,可以添加自定义rules 安装ESLint插件 此时打开vue文件就会标红有问题的位置 安装prettier npm install prettier eslint-config-pr…...
Python Flask框架学习汇编
1、入门级: 《Python Flask Web 框架入门》 这篇博文条理清晰,由简入繁,案例丰富,分十五节详细讲解了Flask框架,强烈推荐! 《python的简单web框架flask【附例子】》 讲解的特别清楚,每一步都…...
Excel·VBA江西省预算一体化工资表一键处理
每月制作工资表导出为Excel后都需要调整格式,删除0数据的列、对工资表项目进行排序、打印设置等等,有些单位还分有“行政”、“事业”2个工资表就需要操作2次。显然,这种重复操作的问题,可以使用VBA代码解决 目录 代码使用说明1&a…...
【A2DP】SBC 编解码器互操作性要求详解
目录 一、SBC编解码器互操作性概述 二、编解码器特定信息元素(Codec Specific Information Elements) 2.1 采样频率(Sampling Frequency) 2.2 声道模式(Channel Mode) 2.3 块长度(Block Length) 2.4 子带数量(Subbands) 2.5 分配方法(Allocation Method) 2…...
redis数据类型以及底层数据结构
redis数据类型以及底层数据结构 String:字符串类型,底层就是动态字符串,使用sds数据结构 Map:有两种数据结构:1.压缩列表:当hash结构中存储的元素个数小于了512个。并且元 …...
R软件线性模型与lmer混合效应模型对生态学龙类智力测试数据层级结构应用
全文链接:https://tecdat.cn/?p40925 在生态与生物学研究中,数据常呈现复杂结构特征。例如不同种群、采样点或时间序列的观测数据间往往存在相关性(点击文末“阅读原文”获取完整代码、数据、文档)。 传统线性模型在处理这类非独…...
打造智能聊天体验:前端集成 DeepSeek AI 助你快速上手
DeepSeek AI 聊天助手集成指南 先看完整效果: PixPin_2025-02-19_09-15-59 效果图: 目录 项目概述功能特点环境准备项目结构组件详解 ChatContainerChatInputMessageBubbleTypeWriter 核心代码示例使用指南常见问题 项目概述 基于 Vue 3 TypeScrip…...
C语言-语法
数据类型 字符串 C中字符串拼接不用+号,直接使用空格。 char* str = "hello" "world"; 换行链接,加上\就不会报错 char* longStr = "00000000000000000000000000000\ 00000000000000000000000000000"; typedef C 语言提供了 typedef …...
Unity组件TrailRenderer屏幕滑动拖尾
Unity组件TrailRenderer屏幕滑动拖尾 介绍制作总结 介绍 今天要做一个拖动效果,正好用到了TrailRenderer这个组件,正好分享一下 效果参考如下: 制作 1.创建空物体TrailObject添加组件TrailRenderer 下面的材质可以根据自己想要制作的效果去…...
基于昇腾MindIE与GPUStack的大模型容器化部署从入门到入土
引言 昇腾MindIE作为华为面向大模型推理的高性能引擎,结合GPUStack的集群管理能力,能够实现多机多卡的高效资源调度与模型服务化部署。本文将以DeepSeek R1-32B模型为例,详细解析从环境准备到服务验证的全流程实践,涵盖昇腾NPU驱…...
大模型信息整理
1. Benchmarks Reasoning, conversation, Q&A benchmarks HellaSwagBIG-Bench HardSQuADIFEvalMuSRMMLU-PROMT-BenchDomain-specific benchmarks GPQAMedQAPubMedQAMath benchmarks GSM8KMATHMathEvalSecurity-related benchmarks PyRITPurple Llama CyberSecEval2. 国内外…...
【Tools】Windows下Git 2.48安装教程详解
00. 目录 文章目录 00. 目录01. Git简介02. Git参考资料03. Git安装04. Git测试05. 附录 01. Git简介 Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。 [1] Git 是 Linus Torvalds 为了帮助管理 Linux 内核…...
【linux网络编程】套接字编程API详细介绍
在C语言中,套接字(Socket)编程主要用于网络通信,尤其是在基于TCP/IP协议的应用程序开发中。常用的套接字编程API主要基于Berkeley Sockets(伯克利套接字)接口,这些函数通常在<sys/socket.h&g…...
护网中shiro常问的问题
1. 漏洞原理 Apache Shiro 是一个强大的 Java 安全框架,提供身份验证、授权、加密及会话管理功能。Shiro 使用 rememberMe 机制来存储用户会话信息,该机制依赖于加密后的 Cookie。当攻击者能够控制 Cookie 并且服务器使用了不安全的反序列化机制时&…...
fastapi房产销售系统
说明: 我希望用fastapi写几个接口,查询房产交易系统的几条数据,然后在postman里面测试 查询客户所有预约记录(含房源信息)需要对应销售经理查询客户所有订单(含房源信息)统计销售经理名下所有房…...
swift -(5) 汇编分析结构体、类的内存布局
一、结构体 在 Swift 标准库中,绝大多数的公开类型都是结构体,而枚举和类只占很小一部分 比如Bool、 Int、 Double、 String、 Array、 Dictionary等常见类型都是结构体 ① struct Date { ② var year: Int ③ var month: Int ④ …...
软件工程笔记下
从程序到软件☆ 章节 知识点 概论☆ 软件的定义,特点,生存周期。软件工程的概论。软件危机。 1.☆软件:软件程序数据文档 (1)软件:是指在计算机系统的支持下,能够完成特定功能与性能的包括…...
ElementUI 级联选择器el-cascader启用选择任意一级选项,选中后关闭下拉框
1、启用选择任意一级选项 在 el-cascader 标签上加上配置项: :props"{ checkStrictly: true }"例如: <el-cascaderref"selectedArrRef"v-model"selectedArr":options"optionsList":props"{ checkStri…...
【项目日记(九)】细节优化与对比测试
前言 上面我们对申请和释放的过程都已写完,并进行了单线程的联调。本期我们来对一些细节进行优化以及与malloc 进行对比测试。 目录 前言 一、大于256KB的内存申请问题 • 申请过程 • 释放过程 • 简单测试 二、使用定长内存池脱离使用new 三、优化释放对…...
PyTorch系列教程:编写高效模型训练流程
当使用PyTorch开发机器学习模型时,建立一个有效的训练循环是至关重要的。这个过程包括组织和执行对数据、参数和计算资源的操作序列。让我们深入了解关键组件,并演示如何构建一个精细的训练循环流程,有效地处理数据处理,向前和向后…...
10 【HarmonyOS NEXT】 仿uv-ui组件开发之Avatar头像组件开发教程(一)
温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! 目录 第一篇:Avatar 组件基础概念与设计1. 组件概述2. 接口设计2.1 形状类型定义2.2 尺寸类型定义2.3 组件属性接口 3. 设计原则4. 使用…...
C++编程指南24 - 避免线程频繁的创建和销毁
一:概述 线程的创建和销毁是昂贵的操作,尤其在多线程程序中频繁创建和销毁线程时,可能会导致性能问题。 二:示例 这段代码中,dispatcher 每收到一个 Message 就创建一个新的线程来处理这个消息。这种方式虽然简单&…...
