探索数据之美:深入学习Plotly库的强大可视化

1. 引言:

Plotly 是一个交互性可视化库,可以用于创建各种漂亮的图表和仪表板。它支持多种编程语言,包括Python、R、JavaScript。在Python中,Plotly提供了Plotly Express和Graph Objects两个主要的绘图接口。

2. Plotly库简介:

2.1 Plotly Express和Graph Objects两个主要接口

  • Plotly Express: 提供了简单而高级的图表绘制功能,通过简单的语法可以创建各种图表类型。对于快速生成图表和初步探索数据非常方便。
  • Graph Objects: 提供了更细粒度的控制,允许用户更精细地定制图表的各个方面。适用于对图表进行更高级别的定制和调整。

2.2 Plotly Dash用于构建交互式仪表板的框架

Plotly Dash是一个用于构建交互式、高度可定制的仪表板的框架。通过Dash,用户可以创建自定义的数据分析仪表板,实现交互式数据探索。

3. Plotly的基础图表类型:

散点图:简单、直观的数据分布展示

import plotly.express as px
import pandas as pd

#创建演示数据
df = pd.DataFrame({
    'date': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04'],
    'product':['A','A','B','C'],
    'amount': [20, 40, 30, 26],
    'cost': [3, 6, 2, 10]
})
df['roi'] = df['amount'] / df['cost']

# 创建散点图
fig = px.scatter(df, x='cost', y='amount',color='product', size='roi',title='Scatter Plot')
fig.show()

运行上述代码后,效果如下,我们可以进行放大、缩小、点击等一些列操作:
scatter

折线图:趋势和变化的可视化

import plotly.express as px

# 创建折线图
fig = px.line(df, x='date', y='amount', title='Date Vs amount')
fig.show()

line

条形图:分类数据的对比和分布

import plotly.express as px

# 创建条形图
fig = px.bar(df, x='date', y='amount', color='product', title='Date Vs amount Vs product')
fig.show()

运行后,效果如下:
bar

饼图:比例和占比的直观呈现

import plotly.express as px

# 创建饼图
fig = px.pie(df, values='Count', names='Category', title='Pie Chart')
fig.show()

效果如下:
pie

4. 高级可视化:

3D 散点图:多维数据的展示

import plotly.graph_objects as go

# 示例数据
df=pd.DataFrame({'x':[1, 2, 3, 4, 5],
'y':[10, 12, 8, 15, 11],
'z' : [5, 8, 3, 10, 6]})

# 创建3D散点图
fig = go.Figure(data=[go.Scatter3d(x=df['x'], y=df['y'], z=df['z'], mode='markers')])
fig.update_layout(title='3D Scatter Plot')
fig.show()

运行后,效果如下:
3d

热力图:相关性的清晰展示

import pandas as pd
import plotly.graph_objects as go

#构建实例数据
data =pd.DataFrame({'month':['2023-01-01', '2023-02-01', '2023-03-01', '2023-04-01', '2023-05-01', '2023-06-01', '2023-07-01', '2023-08-01', '2023-09-01','2023-10-01'],
                 'tm':[74, 101, 139, 96, 182, 173, 74, 100, 86, 237],
                 'dy':[58, 74, 101, 79, 110, 105, 70, 94, 87, 131],
                 'ks':[11, 21, 27, 23, 28, 22, 17, 19, 16, 26]})
df=data.set_index('month',drop=True)
# 创建热力图
fig = go.Figure(data=go.Heatmap(z=df.corr(), x=df.columns, y=df.columns))
fig.update_layout(title='Correlation Heatmap')
fig.show()

进行可视化后,效果如下:
heatmap

桑基图:复杂关系的可视化呈现

import plotly.graph_objects as go

# 创建面积图
fig = go.Figure(data=[go.Scatter(x=df['Date'], y=df['Value'], fill='tozeroy', mode='none')])
fig.update_layout(title='Area Chart')
fig.show()

面积图:趋势和变化的面面俱到

import plotly.graph_objects as go

# 创建桑基图
fig = go.Figure(go.Sankey(node=dict(pad=15, thickness=20), link=dict(source=df['Source'], target=df['Target'], value=df['Value'])))
fig.update_layout(title='Sankey Diagram')
fig.show()

5. 与其他库结合应用:

5.1Plotly Express与Graph Objects的结合

在实际应用中,Plotly Express和Graph Objects可以结合使用,充分发挥它们各自的优势。

5.1.1 散点图(Scatter Plot):
import plotly.express as px
import plotly.graph_objects as go

# 创建散点图(Express)
fig = px.scatter(df, x='X', y='Y', color='Category', size='Size', title='Scatter Plot')

# 添加注释(Graph Objects)
annotations = [go.layout.Annotation(text='Highlight', x=highlight_x, y=highlight_y, showarrow=True, arrowhead=2, ax=0, ay=-40)]
fig.update_layout(annotations=annotations)

fig.show()
5.1.2 热力图(Heatmap):
import plotly.express as px
import plotly.graph_objects as go

#构建实例数据
data =pd.DataFrame({'month':['2023-01-01', '2023-02-01', '2023-03-01', '2023-04-01', '2023-05-01', '2023-06-01', '2023-07-01', '2023-08-01', '2023-09-01','2023-10-01'],
                 'tm':[74, 101, 139, 96, 182, 173, 74, 100, 86, 237],
                 'dy':[58, 74, 101, 79, 110, 105, 70, 94, 87, 131],
                 'ks':[11, 21, 27, 23, 28, 22, 17, 19, 16, 26]})
df=data.set_index('month',drop=True)

# 创建热力图(Express)
fig = px.imshow(df.corr(), x=df.columns, y=df.columns)

# 添加颜色轴(Graph Objects)
colorbar = dict(title='Correlation')
fig.update_layout(coloraxis_colorbar=colorbar)
fig.update_layout(title='Correlation Heatmap')

fig.show()

效果如下:
heat2

5.1.3 桑基图(Sankey Diagram):
import plotly.express as px
import plotly.graph_objects as go

# 创建桑基图(Express)
fig = px.sankey(df, source='Source', target='Target', value='Value')

# 修改图形属性(Graph Objects)
fig.update_layout(title='Sankey Diagram')
fig.update_traces(node=dict(pad=15, thickness=20))

fig.show()

通过结合使用这两个接口,你可以更灵活地创建定制化的图表,满足不同场景的可视化需求。Plotly库的文档和示例提供了更多关于各种图表类型和配置选项的详细信息,因此你可以根据具体情况进行调整和拓展。

5.2 结合Pandas进行数据的直接可视化

Plotly Express与Pandas非常兼容,你可以直接使用Pandas的DataFrame进行绘图。这种结合使得从数据到图表的转换更加简便。

import plotly.express as px
import pandas as pd

# 使用Pandas DataFrame创建图表
df = pd.DataFrame({
    'X': [1, 2, 3, 4],
    'Y': [10, 11, 12, 13],
    'Category': ['A', 'B', 'A', 'B']
})

fig = px.scatter(df, x='X', y='Y', color='Category', title='Scatter Plot')
fig.show()

6. Dash应用示例:

通过Dash构建简单交互式仪表板的实例
利用回调函数实现图表的动态更新
除了在Notebook中创建交互式图表外,Plotly还提供了Dash,一个用于构建交互式仪表板的框架。Dash可以用于创建自定义的数据分析仪表板,使用户能够以交互式方式探索数据。

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import plotly.express as px
import pandas as pd  # 添加 pandas 导入

# 创建Dash应用
app = dash.Dash(__name__)

# 创建示例 DataFrame(请替换成您的实际数据)
data = {
    'X': [1, 2, 3, 4, 5],
    'Y': [10, 11, 12, 13, 14],
    'Size': [20, 15, 10, 5, 25],
    'Category': ['A', 'B', 'A', 'B', 'A']
}
df = pd.DataFrame(data)

# 布局
app.layout = html.Div([
    dcc.Graph(id='scatter-plot'),
    dcc.Dropdown(
        id='dropdown-category',
        options=[
            {'label': category, 'value': category} for category in df['Category'].unique()
        ],
        value=df['Category'].unique()[0],
        multi=False
    )
])

# 回调函数
@app.callback(
    Output('scatter-plot', 'figure'),
    [Input('dropdown-category', 'value')]
)
def update_scatter_plot(selected_category):
    filtered_df = df[df['Category'] == selected_category]
    fig = px.scatter(filtered_df, x='X', y='Y', color='Category', size='Size', title='Scatter Plot')
    return fig

# 运行应用
if __name__ == '__main__':
    app.run_server(debug=True)

运行以后,效果如下,与此同时,我们可以控制筛选器进行联动。

dash

在这个例子中,用户可以通过下拉菜单选择特定的类别,图表将根据选择的类别更新。Dash的强大之处在于你可以使用更复杂的布局、组件和回调函数来创建更丰富的仪表板。

7. 附录

7.1 官方文档链接:

  • Plotly Python图表库官方文档:在官方文档中,你可以找到有关Plotly库的详细信息,包括使用方法、图表类型、配置选项等。它提供了广泛的示例和案例,适合初学者和进阶用户。

7.2 在线教程链接:

  • Plotly Express 教程:Plotly Express的官方在线教程提供了对该高级接口的详细指南,以及许多交互式的示例。适合快速学习Plotly Express的基本用法。

  • Dash 用户指南:Dash框架的官方用户指南提供了创建交互式仪表板的详细说明,包括布局、组件、回调函数等方面的介绍。适合学习如何使用Dash构建定制的数据分析仪表板。

7.3 社区论坛链接:

  • Plotly社区论坛:Plotly的社区论坛是一个与其他用户交流、提问问题和分享经验的平台。你可以在这里找到关于特定问题的解答,了解其他用户的项目和经验。

  • Dash社区论坛:Dash框架有专门的社区论坛,用于讨论与Dash相关的问题、解决方案和项目。通过参与社区,你可以获取更多实用的建议和经验分享。

这些资源将帮助读者更深入地了解和掌握Plotly库的使用,以及构建交互式仪表板的技能。通过参与社区,读者还可以与其他使用Plotly的数据科学家和开发者建立联系,分享和学习最佳实践。

写在最后

通过本博客,读者将深入了解Plotly库的基础和高级功能,学会如何使用它创建丰富、交互式的数据可视化图表。不仅能够应对常见的数据分析任务,还能够通过Dash构建定制化的仪表板,为数据探索和展示提供更多可能性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL中left join、right join、inner join等的区别

一张图可以简洁明了的理解出left join、right join、join、inner join的区别: 1、left join 就是“左连接”,表1左连接表2,以左为主,表示以表1为主,关联上表2的数据,查出来的结果显示左边的所有数据&#…

visual Studio MFC 平台实现图像增强中Gray-level slicing,Bit-plane slicing,对比度拉伸三种方法

MFC 实现图像增强–分段式变换 本文使用visual Studio MFC 平台实现图像增强中的第三大类分段式变换中的三种方法,包括Gray-level slicing,Bit-plane slicing,对比度拉伸. 关于其他MFC单文档工程可参考 01-Visual Studio 使用MFC …

android https 证书过期

有的时候 我们android https 证书过期 ,或者使用明文等方式去访问服务器 可能会碰到类似的 问题 : javax.net.ssl.SSLHandshakeException: Chain validation failed java.security.cert.CertPathValidatorException: Response is unreliable: its validi…

JavaScript类型判断:解密变量真实身份的神奇技巧

文章目录 1. typeof运算符2. instanceof运算符3. Object.prototype.toString4. Array.isArray5. 使用constructor属性6. 使用Symbol.toStringTag7. 使用is类型判断库8. 谨慎使用隐式类型转换结语 🎉JavaScript类型判断:解密变量真实身份的神奇技巧 ☆* o…

OpenTSDB(CVE-202035476)漏洞复现及利用

任务一: 复现环境中的命令注入漏洞。 任务二: 利用命令注入执行whoami,使用DNS外带技术获取结果 任务三:使用反弹shell,将漏洞环境中的shell反弹到宿主机或者vps服务器。 任务一: 1.搭建好环境 2.先去了…

Amazon CTO Werner Vogels:2024年及未来四大技术趋势预测

纵观历史,人类已经开发出各种工具和系统来增强自身能力。无论是印刷机还是装配线,这些创新拓宽了我们的能力范围,造就新的工作和职业,我们也不断适应着新生活。这种变化的速度在过去的一年里迅速加快,云技术、机器学习…

整体迁移SVN仓库到新的windows服务器

一、背景 公司原有的SVN服务器年代比较久远经常出现重启情况,需要把SVN仓库重新迁移到新的服务器上,在网上也搜到过拷贝Repositories文件直接在新服务器覆盖的迁移方案,但考虑到原有的操作系统和现有的操作系统版本不一致,SVN版本…

Redis缓存——Spring Cache入门学习

Spring Cache 介绍 Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。 Spring Cache 提供了一层抽象,底层可以切换不同的缓存实现,例如: EHCacheCaffeineR…

springboot集成邮箱验证功能

准备工作 开启SMTP服务 前往你的邮箱网站,以网易邮箱为例,打开网易邮箱地址,登录你的邮箱,进入邮箱管理后台界面。点击“设置”》》“POP3/SMTP/IMAP”后,点击开启SMTP服务即可。 技术实现 Spring Boot 发送邮件验证…

java审计之java反序列化-CC链

介绍 序列化的本质是内存对象到数据流的一种转换,我们知道内存中的东西不具备持久性,但有些场景却需要将对象持久化保存或传输。 在Java工程中,序列化还广泛应用于JMX,RMI,网络传输(协议包对象&#xff09…

vivado实现分析与收敛技巧4

执行建议 满足以下条件时 , 在建议运行轮次期间执行建议 : • 这些建议处于已启用 (ENABLED) 状态。 • 必须运行 APPLICABLE_FOR 阶段。 • 这些建议必须设置为 AUTO 。 执行建议时 , APPLIED 设置将会更新 , 如下图所示…

vue3动态加载音频文件,用于不同场景加载不同的文件

本文主要介绍如何在vue3中动态加载音频文件。 目录 前言静态加载动态加载import函数watch函数使用watch函数和import函数动态加载音频文件 前言 在vue3中,我们通常使用import xxx from xxxxxx来加载文件,但是如果我们需要加载哪些文件,是需要…

java数据结构(哈希表—HashMap)含LeetCode例题讲解

目录 1、HashMap的基本方法 1.1、基础方法(增删改查) 1.2、其他方法 2、HashMap的相关例题 2.1、题目介绍 2.2、解题 2.2.1、解题思路 2.2.2、解题图解 2.3、解题代码 1、HashMap的基本方法 HashMap 是一个散列表,它存储的内容是键…

Peter算法小课堂—差分与前缀和

差分 Codeforces802 D2C C代码详解 差分_哔哩哔哩_bilibili 一维差分 差分与前缀和可以说成减法和加法的关系、除法和乘法的关系、积分和微分的关系(听不懂吧) 给定数组A,S为A的前缀和数组,则A为S的差分数组 差分数组构造 现…

电子学会C/C++编程等级考试2021年06月(四级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:数字三角形问题 (图1) 图1给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。 注意:路径上的每一步只能从一个数走到下一层上和它…

Android Studio新版UI介绍

顶部菜单栏 左侧主要菜单入口项目名称分支名称 展开之后,主要功能与原来菜单栏功能一样,最大的变化就是把setting独立出去了。 而项目名称这里,展开就可以看到打开的历史工程列表,可以直接新建工程,原来需要在项目名称…

vivado实现分析与收敛技巧3-面向非工程用户的智能设计运行建议

要使用智能设计运行功能特性 , 需要 Vivado 工程。这是因为需要进行运行管理。以下指示信息解释了创建综合后工程的最简单方法。这些信息适用于以下流程的用户: • 非工程实现运行 • 使用较低版本的 Vivado 或第三方综合工具进行综合 访问智能设计…

Git——分支应用进阶

主要内容包括以下几个方面: 长期分支和短期分支的类型以及用途。多种分支模型,其中包括基于工作流的主题分支。不同分支模型的发布流程。在多个预览版程序中使用分支修复安全问题。远程跟踪分支和refspecs规范,以及默认远程版本库配置。拉取…

测评补单助力亚马逊,速卖通,国际站卖家抢占市场,提升转化和评分

想要快速提升商品的销量,测评补单这种方法见效是最快的。特别是新品上线,缺少用户评价,转化率不好,很多商家新品上线都会做测评补单,搞些商品好评,不但可以提升转化,同时在平台也可以获得更多展…

Redis:主从复制

目录 概念配置步骤通过命令配置主从复制原理薪火相传反客为主哨兵(Sentinel)模式原理配置SpringBoot整合Sentinel模式 概念 主机更新后根据配置和策略,自动同步到备机的master/slave机制,Master以写为主,Slave以读为主。 作用: …