python Plotly可视化

文章目录

  • Plotly
    • 常用函数
    • PolarPlotly
    • make_subplots
    • add_trace
    • go.Scatterpolargl
    • update_traces
    • update_layout
    • 综合示例
  • 完整版

Python在数据可视化方面有着丰富的库和函数,其中一些常用的库包括 Matplotlib、Seaborn、Plotly、Bokeh等。

Plotly是一个交互式绘图库,支持创建多种类型的图表,并允许图表在Web浏览器中呈现

Plotly

在Python中,Plotly的主要接口是plotly.graph_objects(通常简写为go),它提供了一系列函数来创建各种类型的图表。

常用函数

go.Line():绘制折线图
go.Scatter(): 绘制散点图
go.Bar(): 绘制条形图
go.Histogram(): 绘制直方图
go.Box(): 绘制箱线图
go.Subplot(): 创建子图

fig.update_layout():设置图表的标题和坐标轴标签
fig.show():显示图表

PolarPlotly

PolarPlotly 通常指的是使用 Plotly 库在极坐标系统中绘制图形。Plotly 是一个强大的交互式绘图库,支持多种类型的图表,包括极坐标图。

import plotly.graph_objects as go  def PolarPlotly(r, theta, mode='lines', line_color='blue', fill_color='none', title='Polar Plot', filename='polar_plot.html'):  """  使用 Plotly 在极坐标中绘制图形。  参数:  r (list/array): 半径值列表。  theta (list/array): 极角值列表(以弧度为单位)。  mode (str, 可选): 绘图模式,可以是 'lines', 'markers', 'lines+markers'。默认为 'lines'。  line_color (str, 可选): 线条颜色。默认为 'blue'。  fill_color (str, 可选): 填充颜色。默认为 'none'。  title (str, 可选): 图表标题。默认为 'Polar Plot'。  filename (str, 可选): 保存的 HTML 文件名。默认为 'polar_plot.html'。  """  # 创建极坐标图形对象  fig = go.Figure(data=[go.Scatterpolar(  r=r,  theta=theta,  mode=mode,  line=dict(color=line_color),  fill='toself' if fill_color != 'none' else 'none',  fillcolor=fill_color  )])  # 设置图表标题和极坐标轴标签  fig.update_layout(  polar=dict(  radialaxis=dict(  visible=True,  range=[min(r) if min(r) > 0 else 0, max(r)]  ),  angularaxis=dict(  thetaunit='radians',  rotation=90  )  ),  title=title  )  # 显示或保存图表  fig.show()  fig.write_html(filename)  # 示例用法  
r = [1, 2, 3, 2, 1]  
theta = [0, 0.5*np.pi, np.pi, 1.5*np.pi, 2*np.pi]  
PolarPlotly(r, theta, mode='lines+markers', fill_color='lightblue', title='Sample Polar Plot')

1.这个函数依赖于 plotly.graph_objects 模块。
2.r 和 theta 应该是等长的列表或数组。
3.theta 的值应该是以弧度为单位的极角。
4.函数将生成一个交互式图表,并保存为 HTML 文件。

make_subplots

make_subplots 是一个用于创建多子图布局的函数,包括极坐标子图、直角坐标子图等。它允许你在一个图表中组合多个极坐标图或其他类型的子图。

import plotly.subplots as make_subplots  # 创建一个包含两个极坐标子图的图表布局  
fig = make_subplots(rows=1, cols=2, subplot_titles=('Polar Subplot 1', 'Polar Subplot 2'), polar=True)

add_trace

add_trace 是一个用于向已存在的图表布局中添加迹(trace)的函数。迹是图表中绘制的数据系列。

fig.add_trace(go.Scatterpolar(r=[1, 2, 3], theta=[0, 1.5, 3] * np.pi), row=1, col=1)

go.Scatterpolargl

go.Scatterpolargl 是 Plotly Graph Objects 中用于创建极坐标散点图或线图的一个类。gl 表示它是使用 WebGL 渲染的,通常用于支持大量的数据点。

import plotly.graph_objects as go  fig.add_trace(go.Scatterpolargl(r=[1, 2, 3], theta=[0, 1.5, 3] * np.pi, mode='lines+markers'))
 mode='lines'|'markers'|'lines+markers',  # 绘图模式  

update_traces

update_traces 是一个用于更新图表中所有迹的属性的函数。你可以用它来更改多个迹的公共属性,例如颜色、线型等。

fig.update_traces(line_color='red', marker_size=10)

update_layout

update_layout 是一个用于更新图表布局的函数。你可以用它来设置标题、坐标轴标签、图例等。

fig.update_layout(  title='My Polar Plot',  polar=dict(  radialaxis=dict(visible=True, range=[0, 4]),  angularaxis=dict(thetaunit='radians', rotation=90)  )  
)

综合示例

下面是一个综合使用这些函数的示例,创建一个包含单个极坐标子图的图表:

import plotly.graph_objects as go  
import numpy as np  # 创建极坐标子图布局  
fig = make_subplots(rows=1, cols=1, polar=True)  # 添加迹  
fig.add_trace(go.Scatterpolargl(  r=[1, 2, 3, 2, 1],  theta=[0, 0.5*np.pi, np.pi, 1.5*np.pi, 2*np.pi],  mode='lines+markers',  line=dict(color='blue'),  fill='toself',  fillcolor='lightblue'  
))  # 更新迹和布局  
fig.update_traces(line_color='red', marker_size=10)  
fig.update_layout(  title='Polar Plot Example',  polar=dict(  radialaxis=dict(visible=True, range=[0, 4]),  angularaxis=dict(thetaunit='radians', rotation=90)  )  
)  # 显示图表  
fig.show()

首先使用 make_subplots 创建了一个极坐标子图布局。然后,我们使用 add_trace 添加了一个 go.Scatterpolargl 迹。接着,我们使用 update_traces 更改了迹的线条颜色和标记大小,并使用 update_layout 设置了图表的标题和极坐标轴的属性。最后,我们使用 show 方法显示了图表。

完整版

import os
import sys
sys.path.append(os.path.abspath(os.path.dirname(os.getcwd())))import re
import gc
import numpy as np
import pandas as pd
import random
import math
import glob
import time
import sys
from itertools import groupby as iter_groupbyimport matplotlib.pyplot as plt
import plotly.graph_objects as go
import plotly.express as px
from plotly.subplots import make_subplots# 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号plt.rcParams['savefig.dpi'] = 100 #图片像素
plt.rcParams['figure.dpi'] = 100 #分辨率import warnings
warnings.filterwarnings("ignore")#dataframe输出时列名对齐
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)pd.set_option('display.width',2000)
'''
原始数据可视化:极坐标动态图
'''
def PolarPlotly(data,rname,anglename,titlesname,groupnames,legendgroupnumber,text,legendtxt='',title='',zname=False):# err:固定误差"""极坐标动态图--------data:dataframername:str,需要画图的列名anglename:str,角度列名titlesname:str,所画的 名称groupnames:list,需要分组的列名legendgroupnumber:int,lengendgroup在groupnames的位置text:list,[文字,col],text的列名legendtxt:legendtext的标注,默认为 ''title='':标题前面要增加的字符"""fig=make_subplots(rows=1,cols=1,specs=[[{'type': 'polar'}]])textcol=[text[1]] if type(text[1])==str else text[1]znamecol=[] if zname==False else znameplot_columns=[rname,anglename]+groupnames+textcol+znamecolplot_columns=list(set(plot_columns))GroupData=data[plot_columns].groupby(groupnames)legendgroupnames=[]for key,MidData in GroupData:if isinstance(key, tuple):legendgroup=str(key[legendgroupnumber])else:legendgroup=str(key)#legendgroup=str(key) if type(key)==str else str(key[legendgroupnumber])showlegend=True if legendgroup not in legendgroupnames else Falser=MidData[rname]theta=MidData[anglename]texts=[text[0]+':'+str(i) for i in MidData[text[1]]]fig.add_trace(go.Scatterpolargl(#'_'.join([str(i) for i in key])r=r,theta=theta,mode='markers',name=legendtxt+legendgroup,showlegend=showlegend,legendgroup=legendgroup,text=texts#go.scattergl:大容量数据,showlegend=False),row=1,col=1)if zname !=False:for zn in zname:z=MidData[zn]fig.add_trace(go.Scatterpolargl(#'_'.join([str(i) for i in key])r=z,theta=theta,mode='markers',name=legendtxt+legendgroup+'_'+zn,showlegend=showlegend,legendgroup=legendgroup,text=texts#go.scattergl:大容量数据,showlegend=False),row=1,col=1)legendgroupnames.append(legendgroup)fig.update_traces(mode='markers',marker_size=3)#, marker_line_width=2fig.update_layout(title='{}{}极坐标图'.format(title,titlesname),#yaxis_zeroline=False, #xaxis_zeroline=False,polar = dict(radialaxis_tickfont_size = 8,angularaxis = dict(tickfont_size = 8,rotation = -90,)),polar2 = dict(radialaxis_tickfont_size = 8,angularaxis = dict(tickfont_size = 8,rotation = -90,)),width=1000,height=800,#xaxis_title='角度',#yaxis_title='随机误差(mm)',template='plotly_white')#template换主题return figdef ScatterPlotly(data,xname,yname,xtitle,ytitle,groupnames,legendgroupnumber,text,legendtxt='',title='',zname=False):# err:固定误差"""散点图动态图--------data:dataframexname:str,需要画图的x轴列名yname:str,需要画图的y轴列名xtitle:strytitle:strgroupnames:list,需要分组的列名legendgroupnumber:int,lengendgroup在groupnames的位置text:list,[文字,col]legendtxt:legendtext的标注,默认为 ''title='':标题前面要增加的字符zname:列表xyname:列表,另外的xname,yname"""fig=go.Figure()textcol=[text[1]] if type(text[1])==str else text[1]znamecol=[] if zname==False else znameplot_columns=[xname,yname]+groupnames+textcol+znamecolplot_columns=list(set(plot_columns))GroupData=data.groupby(groupnames)legendgroupnames=[]for key,MidData in GroupData:if isinstance(key, tuple):legendgroup=str(key[legendgroupnumber])else:legendgroup=str(key)showlegend=True if legendgroup not in legendgroupnames else Falsex=MidData[xname]y=MidData[yname]texts=[str(text[0])+':'+str(i) for i in MidData[text[1]].values.tolist()]#texts=[text[0]+str(i) for i in MidData[text[1]]]fig.add_trace(go.Scattergl(x=x,y=y,mode='markers',name=legendtxt+legendgroup,showlegend=showlegend,legendgroup=legendgroup,text=texts#go.scattergl:大容量数据,showlegend=False),)if zname !=False:for zn in zname:z=MidData[zn]fig.add_trace(go.Scattergl(x=x,y=z,mode='markers',name=legendtxt+legendgroup+'_'+zn,showlegend=showlegend,legendgroup=legendgroup,text=texts#go.scattergl:大容量数据,showlegend=False),)legendgroupnames.append(legendgroup)fig.update_traces(mode='markers',marker_size=3)#, marker_line_width=2fig.update_layout(title='{}{}和{}的散点图'.format(title,xtitle,ytitle),yaxis_zeroline=False, xaxis_zeroline=False,width=1000,height=600,xaxis_title=xtitle,yaxis_title=ytitle,template='plotly_white')#template换主题return fig

代码块解析:

for key,MidData in GroupData:if isinstance(key, tuple):legendgroup=str(key[legendgroupnumber])else:legendgroup=str(key)
'''            
这段代码是Python中的一部分,它遍历一个名为GroupData的可迭代对象(可能是一个列表、元组或其他可迭代对象),该对象包含键值对。对于GroupData中的每一对键值对,它都会执行一些操作,具体取决于键的类型。for key, MidData in GroupData:这一行是一个for循环,用于遍历GroupData中的每一项。它假设GroupData是一个由键值对组成的可迭代对象,如列表的列表、元组的元组等。每次迭代中,key会被赋值为当前的键,MidData会被赋值为对应的值。
if isinstance(key, tuple):这一行检查key是否是一个元组。isinstance()函数用于检查对象的类型是否是指定类型(在这种情况下是元组)。
legendgroup=str(key[legendgroupnumber])如果key是一个元组,这一行会执行。它取key中的第legendgroupnumber个元素(这里假设legendgroupnumber是一个已定义的变量),并将其转换为字符串。然后,它将这个字符串赋值给legendgroup变量。
else:如果key不是一个元组,那么会执行这个else块。
legendgroup=str(key)在else块中,key被转换为字符串,并赋值给legendgroup变量。
这段代码的主要目的是根据key的类型(是否是元组)来设置legendgroup变量的值。如果key是元组,它会取元组中的特定元素;否则,它会直接使用key的值。这通常用于数据可视化中,特别是在设置图例组(legend group)时,根据数据的不同属性(如类别、分组等)来区分不同的数据系列。
'''

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

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

相关文章

网页打开慢,这锅该谁背?

一、背景 工作中扯皮说不可避免且非常常见的事情. 开发与产品、开发和测试、前端和后端都会产生扯皮现象。今天要聊的一个问题就是前后端之间的扯皮问题。 网页打开太慢或者点击了某个按钮发现数据很久才显示出来,这个锅谁背? 做开发不能无凭据地胡乱甩锅, 我们…

电子电气架构——汽车以太网诊断路由汇总

电子电气架构——汽车以太网诊断路由汇总 我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 人们会在生活中不断攻击你。他们的主要武器是向你灌输对自己的怀疑:你的价值、你的能力、你的潜力。他们往往会将…

python 蓝桥杯填空题

文章目录 字母数判断列名(进制问题)特殊日期大乘积星期几 字母数 由于是填空题,那么寻找的话,就直接让每一个位置都是A,通过计算看看是不是结果大于2022即可 判断列名(进制问题) 这道题目,我们可…

视频号带货究竟怎么做?老阳分享的项目怎么样?

在当今社会,随着互联网的快速发展,社交媒体已经成为人们日常生活中不可或缺的一部分。在这个背景下,视频号带货作为一种新兴的电商模式,逐渐崭露头角。许多人都想通过加入视频号带货行业来实现自己的财富自由。其中,老…

SPSS Statistics for Mac/Win:让数据说话,为决策赋能

在数字化时代,数据已成为决策的关键。为了从海量数据中提取有价值的信息,专业的统计分析软件不可或缺。IBM SPSS Statistics就是这样一款强大的工具,无论是Windows还是Mac用户,都能通过它轻松实现数据分析和决策支持。 一、SPSS …

耗时任务的触发接口与状态检测接口-案例 demo

controller 层 Autowiredprivate DownloadService service;// 触发下载任务GetMapping(value "/downloadData")ResponseBodypublic Result<Object> downloadData(ServletRequest request,RequestParam(value "userId",defaultValue "anonymo…

从0到1入门C++编程——09 STL、string容器、vector容器、deque容器

文章目录 一、标准模板库STL二、容器算法迭代器应用1、遍历容器中整型数据2、遍历容器中自定义数据类型3、容器中嵌套容器 三、string容器1、构造函数2、赋值操作3、字符串拼接4、查找和替换5、字符串比较6、字符访问与存取7、插入和删除8、子串 四、vector容器1、构造函数2、赋…

游戏力:竞技游戏设计实战教程

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 游戏力&#xff1a;竞技游戏设计实战教程 引言…

GBU3010-ASEMI火牛适配器专用整流桥GBU3010

编辑&#xff1a;ll GBU3010-ASEMI火牛适配器专用整流桥GBU3010 型号&#xff1a;GBU3010 品牌&#xff1a;ASEMI 封装&#xff1a;GBU-4 最大重复峰值反向电压&#xff1a;1000V 最大正向平均整流电流(Vdss)&#xff1a;30A 功率(Pd)&#xff1a;大功率 芯片个数&…

前端运算符比较与计算中的类型转换,运算规则

题目&#xff1a; 下面表达式的值分别都是什么&#xff08;类型转换&#xff09; 0 0 0 2 true 2 false false false false 0 false undefined false null null undefined\t\r\n 0JS中的原始类型有哪些 原始值类型就是 存储的都是值&#xff0c;没有函数可以调用的。…

【C++】二叉树进阶面试题(下)

目录 6. 根据一棵树的前序遍历与中序遍历构造二叉树 题目 分析 代码 7. 根据一棵树的中序遍历与后序遍历构造二叉树 题目 分析 代码 8. 二叉树的前序遍历&#xff0c;非递归迭代实现 题目 分析 代码 9. 二叉树中序遍历 &#xff0c;非递归迭代实现 题目 分析 …

Vue跳转页面传递参数

Vue跳转页面传递参数 &#x1f31f; 前言 欢迎来到我的小天地&#xff0c;这里是我记录技术点滴、分享学习心得的地方。&#x1f4da; &#x1f6e0;️ 技能清单 编程语言&#xff1a;Java、C、C、Python、Go、前端技术&#xff1a;Jquery、Vue.js、React、uni-app、EchartsUI…

RLNNA-DBSCAN聚类

RLNNA-DBSCAN聚类 RLNNA算法&#xff08;基于强化学习的神经网络优化算法&#xff09;是一种性能较佳的优化算法。DBSCAN聚类算法&#xff08;密度聚类算法&#xff09;是一种基于密度的聚类算法&#xff0c;其主要思想是通过寻找样本点周围的密度可达关系来聚类数据。 使用RL…

自动化专家来谈谈Selenium中的时间等待

在 Selenium 中&#xff0c;时间等待指在测试用例中等待某个操作完成或某个事件发生的时间。Selenium 中提供了多种方式来进行时间等待&#xff0c;包括使用 ExpectedConditions 中的 presence_of_element_located 和 visibility_of_element_located 方法等待元素可见或不可见&…

小白如何选择阿里云服务器配置?小白不怕

阿里云服务器配置怎么选择&#xff1f;CPU内存、公网带宽和系统盘怎么选择&#xff1f;个人开发者或中小企业选择轻量应用服务器、ECS经济型e实例&#xff0c;企业用户选择ECS通用算力型u1云服务器、ECS计算型c7、通用型g7云服务器&#xff0c;阿里云服务器网aliyunfuwuqi.com整…

事件流、事件捕获、事件冒泡、事件委托

一、事件流 事件流指的是事件完整执行过程中的流动路径&#xff0c;分为捕获阶段、冒泡阶段。如上图 二、事件捕获 当一个元素的事件被触发时&#xff0c;会从DOM的根元素开始&#xff0c;依次调用同名事件&#xff08;从外到里&#xff0c;从父到子&#xff09;。 DOM.addEve…

基于炬芯ATS283X头戴式蓝牙耳机开发

基于炬芯ATS283X头戴式蓝牙耳机开发 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加他微信hezkz17, 本群提供音频技术答疑服务,+群赠送蓝牙音频,DSP音频项目核心开发资料, 1 电路设计 2 SDK 开发

CryoEM - CryoAI: Amortized Inference of Poses 工程源码复现

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/136384544 Paper: CryoAI: Amortized Inference of Poses for Ab Initio Reconstruction of 3D Molecular Volumes from Real Cryo-EM Images CryoAI: 基于摊…

国产嵌入式DSP教学实验箱_操作教程:22-AD采集DA输出实验(采集输出正弦波)

一、实验目的 掌握EMIFA、SPI的使用&#xff0c;了解AD7606、AD5724的芯片特性和使用&#xff0c;并实现基于AD7606采集、AD5724输出正弦波。 二、实验原理 StarterWare StarterWare是一个免费的软件开发包&#xff0c;它包含了示例应用程序。StarterWare提供了一套完整的G…

代码随想录刷题笔记-Day30

1. 解数独 37. 解数独https://leetcode.cn/problems/sudoku-solver/ 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x…