第二十一章:Python-Plotly库实现数据动态可视化

news2025/4/5 19:18:57

Plotly是一个强大的Python可视化库,支持创建高质量的静态、动态和交互式图表。它特别擅长于绘制三维图形,能够直观地展示复杂的数据关系。本文将介绍如何使用Plotly库实现函数的二维和三维可视化,并提供一些优美的三维函数示例。资源绑定附上完整资源供读者参考学习!

一、库的介绍

Plotly提供了两种主要的API:

  • Plotly Express:简化的API,适合快速创建常见图表

  • Plotly Graph Objects:功能更强大和灵活,适用于复杂的自定义图表。

安装Plotly库:

bash

pip install plotly

二、常见函数示例

1. 二维函数示例

示例1:正弦函数
Python示例代码
import plotly.graph_objects as go
import numpy as np

x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)

fig = go.Figure(data=go.Scatter(x=x, y=y, mode='lines'))
fig.update_layout(title='正弦函数', xaxis_title='x', yaxis_title='y')
fig.show()
效果展示

示例2:抛物线函数
Python示例代码
import plotly.graph_objects as go
import numpy as np

y = np.linspace(-10, 10, 100)
x= y**2

fig = go.Figure(data=go.Scatter(x=x, y=y, mode='lines'))
fig.update_traces(line=dict(color='red'))
fig.update_layout(title='抛物线函数', xaxis_title='x', yaxis_title='y')
fig.show()
效果展示

2. 三维函数示例

示例1:三维曲面
Python示例代码
import plotly.graph_objects as go
import numpy as np

x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))

fig = go.Figure(data=go.Surface(z=z, x=x, y=y))

fig.update_layout(title='三维曲面', scene=dict(xaxis_title='x', yaxis_title='y', zaxis_title='z'))
fig.show()
效果展示
示例2:三维曲线
Python示例代码
import plotly.graph_objects as go
import numpy as np
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
x = z * np.sin(theta)
y = z * np.cos(theta)

fig = go.Figure(data=go.Scatter3d(x=x, y=y, z=z, mode='lines'))
fig.update_traces(line=dict(color='orange', width=2))
fig.update_layout(title='三维曲线', scene=dict(xaxis_title='x', yaxis_title='y', zaxis_title='z'))
fig.show()
效果展示

三、优美的三维函数示例

示例1:球面函数

Python示例代码
import plotly.graph_objects as go
import numpy as np

u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
x = np.outer(np.cos(u), np.sin(v))
y = np.outer(np.sin(u), np.sin(v))
z = np.outer(np.ones(np.size(u)), np.cos(v))

fig = go.Figure(data=go.Surface(z=z, x=x, y=y, colorscale='Reds'))
fig.update_layout(title='球面', scene=dict(xaxis_title='x', yaxis_title='y', zaxis_title='z'))
fig.show()
效果展示

示例2:莫比乌斯带

Python示例代码
import plotly.graph_objects as go
import numpy as np

u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(-0.5, 0.5, 100)
u, v = np.meshgrid(u, v)
x = (1 + v * np.cos(u / 2)) * np.cos(u)
y = (1 + v * np.cos(u / 2)) * np.sin(u)
z = v * np.sin(u / 2)

fig = go.Figure(data=go.Surface(z=z, x=x, y=y, colorscale='rainbow'))
fig.update_layout(title='莫比乌斯带', scene=dict(xaxis_title='x', yaxis_title='y', zaxis_title='z'))
fig.show()
效果展示

四、动态和交互式图表示例

示例1:交互式按钮

Python示例代码
import plotly.graph_objects as go

fig = 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"))

# 配置交互按钮
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加速的大数据渲染

Python示例代码
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()
效果展示

示例3:实时疫情数据仪表盘

Python示例代码
from dash import Dash, dcc, html, Input, Output
import plotly.graph_objects as go
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]

    # 使用go.Scatter同时显示折线和数据点
    fig = go.Figure()
    for col in ["cases", "deaths"]:
        fig.add_trace(go.Scatter(
            x=filtered_df["date"],
            y=filtered_df[col],
            mode='lines+markers',
            marker=dict(size=8, color='red'),
            name=col
        ))

    fig.update_layout(title="Covid-19 Cases Over Time", xaxis_title="date", yaxis_title="value")
    return fig


if __name__ == "__main__":
    app.run(debug=True)
效果展示

五、Plotly与Matplotlib的比较

Plotly和Matplotlib都是Python中广泛使用的可视化库,但它们在某些方面有所不同:

特性PlotlyMatplotlib
交互性生成交互式图表,支持缩放、悬停生成静态图表
易用性API较为复杂,但提供了丰富的功能API简单直观,适合初学者
适用场景适合创建动态和交互式图表,如Web应用适合创建静态图表,如科学论文
学习曲线较陡峭,需要时间熟悉API较平缓,易于上手

通过这些比较,可以看出Plotly和Matplotlib各有优缺点,选择哪个库取决于你的具体需求。

六、函数参数用法总结

以下是Plotly中常用函数的参数用法总结:

函数参数描述
Scatterx, y绘制二维散点图或折线图
Scatter3dx, y, z绘制三维散点图或曲线
Surfacex, y, z绘制三维曲面图
Bar3dx, y, z, dx, dy, dz绘制三维条形图
updatemenusbuttons, direction, type配置交互按钮
render_modewebgl使用WebGL加速渲染

通过这些函数,你可以轻松实现各种数学函数的可视化,为数据分析和建模提供强大的工具。希望本文能帮助你快速上手Plotly库!资源绑定附上完整资源供读者参考学习!

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

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

相关文章

系统思考反馈

最近交付的都是一些持续性的项目,越来越感觉到,系统思考和第五项修炼不只是简单的一门课程,它们能真正融入到我们的日常工作和业务中,帮助我们用更清晰的思维方式解决复杂问题,推动团队协作,激发创新。 特…

【C++】vector常用方法总结

📝前言: 在C中string常用方法总结中我们讲述了string的常见用法,vector中许多接口与string类似,作者水平有限,所以这篇文章我们主要通过读vector官方文档的方式来学习vector中一些较为常见的重要用法。 🎬个…

2025年数智化电商产业带发展研究报告260+份汇总解读|附PDF下载

原文链接:https://tecdat.cn/?p41286 在数字技术与实体经济深度融合的当下,数智化产业带正成为经济发展的关键引擎。 从云南鲜花产业带的直播热销到深圳3C数码的智能转型,数智化正重塑产业格局。2023年数字经济规模突破53.9万亿元&#xff…

Linux中常用服务器监测命令(性能测试监控服务器实用指令)

1.查看进程 ps -ef|grep 进程名以下指令需要先安装:sysstat,安装指令: yum install sysstat2.查看CPU使用情况(间隔1s打印一个,打印6次) sar -u 1 63.#查看内存使用(间隔1s打印一个,打印6次) sar -r 1 6

基于 GEE 的区域降水数据可视化:从数据处理到等值线绘制

目录 1 引言 2 代码功能概述 3 代码详细解析 3.1 几何对象处理与地图显示 3.2 加载 CHIRPS 降水数据 3.3 筛选不同时间段的降水数据 3.4 绘制降水时间序列图 3.5 计算并可视化短期和长期降水总量 3.6 绘制降水等值线图 4 总结 5 完整代码 6 运行结果 1 引言 在气象…

曲线拟合 | Matlab基于贝叶斯多项式的曲线拟合

效果一览 代码功能 代码功能简述 目标:实现贝叶斯多项式曲线拟合,动态展示随着数据点逐步增加,模型后验分布的更新过程。 核心步骤: 数据生成:在区间[0,1]生成带噪声的正弦曲线作为训练数据。 参数设置&#xff1a…

Qt6调试项目找不到Bluetooth Component蓝牙组件

错误如图所示 Failed to find required Qt component "Bluetooth" 解决方法:搜索打开Qt maintenance tool 工具 打开后,找到这个Qt Connectivity,勾选上就能解决该错误

JAVA- 锁机制介绍 进程锁

进程锁 基于文件的锁基于Socket的锁数据库锁分布式锁基于Redis的分布式锁基于ZooKeeper的分布式锁 实际工作中都是集群部署,通过负载均衡多台服务器工作,所以存在多个进程并发执行情况,而在每台服务器中又存在多个线程并发的情况,…

Java Spring Boot 与前端结合打造图书管理系统:技术剖析与实现

目录 运行展示引言系统整体架构后端技术实现后端代码文件前端代码文件1. 项目启动与配置2. 实体类设计3. 控制器设计4. 异常处理 前端技术实现1. 页面布局与样式2. 交互逻辑 系统功能亮点1. 分页功能2. 搜索与筛选功能3. 图书操作功能 总结 运行展示 引言 本文将详细剖析一个基…

深入剖析JavaScript多态:从原理到高性能实践

摘要 JavaScript多态作为面向对象编程的核心特性,在动态类型系统的支持下展现了独特的实现范式。本文深入解析多态的三大实现路径:参数多态、子类型多态与鸭子类型,详细揭示它们在动态类型系统中的理论基础与实践意义。结合V8引擎的优化机制…

GalTransl开源程序支持GPT-4/Claude/Deepseek/Sakura等大语言模型的Galgame自动化翻译解决方案

一、软件介绍 文末提供程序和源码下载 GalTransl是一套将数个基础功能上的微小创新与对GPT提示工程(Prompt Engineering)的深度利用相结合的Galgame自动化翻译工具,用于制作内嵌式翻译补丁。支持GPT-4/Claude/Deepseek/Sakura等大语言模型的…

TGES 2024 | 基于空间先验融合的任意尺度高光谱图像超分辨率

Arbitrary-Scale Hyperspectral Image Super-Resolution From a Fusion Perspective With Spatial Priors TGES 2024 10.1109/TGRS.2024.3481041 摘要:高分辨率高光谱图像(HR-HSI)在遥感应用中起着至关重要的作用。单HSI超分辨率&#xff…

算法基础_基础算法【高精度 + 前缀和 + 差分 + 双指针】

算法基础_基础算法【高精度 前缀和 差分 双指针】 ---------------高精度---------------791.高精度加法题目介绍方法一:代码片段解释片段一: 解题思路分析 792. 高精度减法题目介绍方法一:代码片段解释片段一: 解题思路分析 7…

Python数据类型-list

列表(List)是Python中最常用的数据类型之一,它是一个有序、可变的元素集合。 1. 列表基础 创建列表 empty_list [] # 空列表 numbers [1, 2, 3, 4, 5] # 数字列表 fruits [apple, banana, orange] # 字符串列表 mixed [1, hello, 3.14, True] # 混合类型…

如何使用cpp操作香橙派GPIO --使用<wiringPi.h>

香橙派是国产SBC ,对标树莓派。不过国内的开发环境确实挺惨的,没多少帖子讨论。楼主决定从今天起,不定期更新香橙派的教程。 今天的教程是如何使用香橙派下载wiringOP 并使用CPP操作GPIO 操作GPIO 下载wiringPi 检查git 版本克隆wiringPi…

nacos-sdk-go v2.29 中一个拼写错误,我定位了3个小时 ……

文章目录 问题背景问题现象问题定位解决方案经验总结 问题背景 今天在给项目增加服务注册和发现功能时,选择了 nacos 作为服务注册中心。在使用 nacos-sdk-go v2.29 版本进行开发时,遇到了一个令人啼笑皆非的问题,足足花了3个小时才找到原因。 问题现象 在实现服务订阅通知功…

Linux中的文件寻址

Linux的层级结构 在Linux中一切皆文件 其中 要注意在命令行中看实际选择写哪一种路径 相对路径 绝对路径名称的简写,省略了用户当前所在的系统位置此名称只有在管理当前所在系统目录中子文件时才能使用系统中不以/开有的文件名称都为相对路径在程序操作时会自动…

静态时序分析:时钟标记(作为数据使用的时钟)及其分析方式

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 引言 一般情况下,设计中的时钟路径和数据路径是严格区分开的:时钟路径即从时钟源对象(时钟定义点)到触发器的时钟…

AI学习记录-QWQ32b太强了

业务理解能力爆表,指令遵循能力极强,才32b成本极低,大量的公司的项目可以嵌入到自己的项目当中了,再fineture一下,以后不上AI的系统都卖不出去了。 试验1 输出 试验2: 输出

STM32 FATFS - 在spi的SD卡中运行fatfs

参考文章 STM32 CubeMX 硬件SPI SD卡 FATFS_stm32cubemx fatfs-CSDN博客 例程地址:STM32FatFS: 基于stm32的fatfs例程,配合博客文章 基于野火STM32MINI开发板 STM32配置 系统模式配置 输出串口配置 SPI配置 使用全双工模式,禁用硬件…