探索数据之美:深入学习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构建定制化的仪表板,为数据探索和展示提供更多可能性。

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

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

相关文章

音乐播放器Swinsian mac功能介绍

Swinsian mac是一款音乐播放器,它的特点是轻量级、快速、易用。Swinsian支持多种音频格式,包括MP3、AAC、FLAC、WAV等。它还具有iTunes集成功能,可以自动导入iTunes音乐库中的音乐,并支持智能播放列表、标签编辑、自定义快捷键等功…

STM32Cube高效开发教程<基础篇>(十)----USART/UART通信

声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。    本专栏博客参考《STM32Cube高效开发教程(基础篇)》,有意向的读者可以购买正版书籍进行学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。 一、 功能概述…

Linux shell for jar test

Linux shell 脚本,循环解析命令行传入的所有参数,并按照不同的传参实现对不同的 java jar文件 进行测试执行。 [rootlocalhost demo]# cat connTest.sh #!/bin/bash# Linux shell for qftool java jar test# modes DEFAULT_MODE2jarfiles[1]common-1.0…

OpenAI公布CEO和董事会成员:微软加入,Ilya出局

11月30日,OpenAI在官网公布了新一届领导层和初始董事会成员:Sam Altman重新担任CEO,Mira Murati继续担任首席技术官,Greg Brockman继续担任总裁。 新的董事会成员包括:Bret Taylor(主席)、Larr…

docker部署elasticsearch+kibana+head

前言 最近,项目需要使用elasticsearch,所以就想快速安装一个使用,最开始是docker安装了7.10.1版本。 后面计划使用Java开发,发现有 RestHighLevelClient 和 Elasticsearch Java API Client两种客户端连接方式。 然后网上查阅了一…

深入剖析:知识付费系统源码解读与技术实现

知识付费系统源码是构建一个高效、稳定平台的关键。在本文中,我们将深入解析知识付费系统的源码,同时提供一些关键技术代码,以助你更好地理解和实现这一系统。 1. 知识付费系统的基本结构 首先,让我们看一下知识付费系统的基本…

共享娱乐宝库:电视盒子影视源分享攻略

共享娱乐宝库:电视盒子影视源分享攻略 前言电视盒子的基本原理解析1. **硬件组成**:2. **操作系统:**3. **网络连接:**4. **应用市场和应用:**5. **获取影视资源的方式:**6. **用户交互:**7. **…

linux 中vmalloc实现简述

vmalloc 用途 vmalloc只用于内核模块的逻辑地址分配,也就是说它的逻辑地址是挂在init_mm的pgd页表上的。它可将几段不连续物理区域合并分配一个连续逻辑区域。主要用于内核和驱动。 vmalloc 实现 入口在__vmalloc_node_range。 首先分配一个vm_struct&#xff0c…

论文学习-Bert 和GPT 有什么区别?

Foundation Models, Transformers, BERT and GPT 总结一下: Bert 是学习向量表征,让句子中某个词的Embedding关联到句子中其他重要词。最终学习下来,就是词向量的表征。这也是为什么Bert很容易用到下游任务,在做下游任务的时候&a…

经验分享:JMeter控制RPS

一、前言 ​ RPS (Request Per Second)一般用来衡量服务端的吞吐量,相比于并发模式,更适合用来摸底服务端的性能。我们可以通过使用 JMeter 的常数吞吐量定时器来限制每个线程的RPS。对于RPS,我们可以把他理解为我们的TPS,我们就…

C语言猜数字小游戏

本文将介绍如何使用C语言写一个猜数字的小游戏 具体代码如下&#xff1a; #include<stdio.h> #include<stdlib.h> #include<time.h>// 显示游戏菜单 void menu() {printf("**** 猜数字游戏! ****\n");printf("**** 按1开始游戏 ****\…

数组?NO 系Vector啊!

文章目录 前言一、vector的介绍二、vector的使用2.1 vector求容量的用法2.2 vector的增删查改用法2.2.1 尾插2.2.2 尾删2.2.3 头插2.2.4 任意位置删除 2.3 vector的iterator是什么以及失效问题 三、vector的模拟实现3.1 成员变量3.2 成员函数3.2.1 构造函数3.2.2 拷贝构造3.2.3…

Elasticsearch桶聚合和管道聚合

1. 根据名称统计数量 GET order/_search {"_source": false,"aggs": {"aggs_name": { // 自定义查询结果名称"terms": { // 使用的函数"field": "name.keyword"}}} }查询结果例子&#xff1a; "aggregat…

一起学docker系列之十五深入了解 Docker Network:构建容器间通信的桥梁

目录 1 前言2 什么是 Docker Network3 Docker Network 的不同模式3.1 桥接模式&#xff08;Bridge&#xff09;3.2 Host 模式3.3 无网络模式&#xff08;None&#xff09;3.4 容器模式&#xff08;Container&#xff09; 4 Docker Network 命令及用法4.1 docker network ls4.2 …

MSSQL注入

目录 基本的UNION注入&#xff1a; 错误基于的注入&#xff1a; 时间基于的盲注入&#xff1a; 堆叠查询&#xff1a; 理解MSSQL注入是学习网络安全的一部分&#xff0c;前提是您在合法、授权的环境中进行&#xff0c;用于了解如何保护您的应用程序免受此类攻击。以下是有关…

【linux】/etc/security/limits.conf配置文件详解、为什么限制、常见限制查看操作

文章目录 一. limits.conf常见配置项详解二. 文件描述符&#xff08;file descriptor&#xff09;简述三. 为什么限制四. 相关操作1. 展示当前资源限制2. 查看系统当前打开的文件描述符数量3. 查看某个进程打开的文件描述符数量4. 各进程占用的文件描述符 /etc/security/limits…

大势智慧与四川资源测绘签署战略合作协议

战略合作 11月27日上午&#xff0c;武汉大势智慧科技有限公司&#xff08;后简称“大势智慧”&#xff09;和四川省自然资源测绘地理信息有限责任公司&#xff08;后简称“测绘公司”&#xff09;在成都成功签订战略合作协议&#xff0c;大势智慧董事长黄先锋&#xff0c;测绘…

SpringBoot进行消息推送的的几种方式

Spring Boot进行消息推送的几种方式包括&#xff1a; WebSocket SockJS STOMP Server-Sent Events (SSE) Push Notifications 以下是WebSocket的案例代码&#xff1a; 添加WebSocket依赖 <dependency><groupId>org.springframework.boot</groupId>&l…

Android Service中弹出对话框

背景 dialog 对话框只提供Activity上下文显示环境&#xff0c;但是很多时候需要在后台服务中显示对话框的场景&#xff0c;例如后台收到哪个反馈时&#xff0c;弹出对应的对话框提示用户。 解决方案&#xff1a; 1、添加权限&#xff1a; <!--services权限--> <uses…

博文小调研

感谢信 很高兴认识各位盆友&#xff0c;天南地北一家人&#xff01; 无论身在行业差异&#xff0c;所处职位高低&#xff0c;工作年限长短&#xff0c;这个平台都为爱好学习的人们提供了很好的机会和进步的源动力。 博主今年自11月份开启了新的系列文章&#xff0c;每周发表6…