广州网站建设哪家便宜,网站开发设计报告怎么写,昆明做网站的公司有哪些,工程公司招聘文章目录 Plotly常用函数PolarPlotlymake_subplotsadd_tracego.Scatterpolarglupdate_tracesupdate_layout综合示例 完整版 Python在数据可视化方面有着丰富的库和函数#xff0c;其中一些常用的库包括
Matplotlib、Seaborn、Plotly、Bokeh等。 Plotly是一个交互式绘图库其中一些常用的库包括
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, modelines, line_colorblue, fill_colornone, titlePolar Plot, filenamepolar_plot.html): 使用 Plotly 在极坐标中绘制图形。 参数: r (list/array): 半径值列表。 theta (list/array): 极角值列表以弧度为单位。 mode (str, 可选): 绘图模式可以是 lines, markers, linesmarkers。默认为 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( rr, thetatheta, modemode, linedict(colorline_color), filltoself if fill_color ! none else none, fillcolorfill_color )]) # 设置图表标题和极坐标轴标签 fig.update_layout( polardict( radialaxisdict( visibleTrue, range[min(r) if min(r) 0 else 0, max(r)] ), angularaxisdict( thetaunitradians, rotation90 ) ), titletitle ) # 显示或保存图表 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, modelinesmarkers, fill_colorlightblue, titleSample 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(rows1, cols2, subplot_titles(Polar Subplot 1, Polar Subplot 2), polarTrue)add_trace
add_trace 是一个用于向已存在的图表布局中添加迹trace的函数。迹是图表中绘制的数据系列。
fig.add_trace(go.Scatterpolar(r[1, 2, 3], theta[0, 1.5, 3] * np.pi), row1, col1)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, modelinesmarkers))modelines|markers|linesmarkers, # 绘图模式 update_traces
update_traces 是一个用于更新图表中所有迹的属性的函数。你可以用它来更改多个迹的公共属性例如颜色、线型等。
fig.update_traces(line_colorred, marker_size10)
update_layout
update_layout 是一个用于更新图表布局的函数。你可以用它来设置标题、坐标轴标签、图例等。
fig.update_layout( titleMy Polar Plot, polardict( radialaxisdict(visibleTrue, range[0, 4]), angularaxisdict(thetaunitradians, rotation90) )
)综合示例
下面是一个综合使用这些函数的示例创建一个包含单个极坐标子图的图表
import plotly.graph_objects as go
import numpy as np # 创建极坐标子图布局
fig make_subplots(rows1, cols1, polarTrue) # 添加迹
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], modelinesmarkers, linedict(colorblue), filltoself, fillcolorlightblue
)) # 更新迹和布局
fig.update_traces(line_colorred, marker_size10)
fig.update_layout( titlePolar Plot Example, polardict( radialaxisdict(visibleTrue, range[0, 4]), angularaxisdict(thetaunitradians, rotation90) )
) # 显示图表
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,znameFalse):# err:固定误差极坐标动态图--------data:dataframername:str,需要画图的列名anglename:str,角度列名titlesname:str,所画的 名称groupnames:list,需要分组的列名legendgroupnumber:int,lengendgroup在groupnames的位置text:list,[文字,col],text的列名legendtxt:legendtext的标注默认为 title:标题前面要增加的字符figmake_subplots(rows1,cols1,specs[[{type: polar}]])textcol[text[1]] if type(text[1])str else text[1]znamecol[] if znameFalse else znameplot_columns[rname,anglename]groupnamestextcolznamecolplot_columnslist(set(plot_columns))GroupDatadata[plot_columns].groupby(groupnames)legendgroupnames[]for key,MidData in GroupData:if isinstance(key, tuple):legendgroupstr(key[legendgroupnumber])else:legendgroupstr(key)#legendgroupstr(key) if type(key)str else str(key[legendgroupnumber])showlegendTrue if legendgroup not in legendgroupnames else FalserMidData[rname]thetaMidData[anglename]texts[text[0]:str(i) for i in MidData[text[1]]]fig.add_trace(go.Scatterpolargl(#_.join([str(i) for i in key])rr,thetatheta,modemarkers,namelegendtxtlegendgroup,showlegendshowlegend,legendgrouplegendgroup,texttexts#go.scattergl:大容量数据,showlegendFalse),row1,col1)if zname !False:for zn in zname:zMidData[zn]fig.add_trace(go.Scatterpolargl(#_.join([str(i) for i in key])rz,thetatheta,modemarkers,namelegendtxtlegendgroup_zn,showlegendshowlegend,legendgrouplegendgroup,texttexts#go.scattergl:大容量数据,showlegendFalse),row1,col1)legendgroupnames.append(legendgroup)fig.update_traces(modemarkers,marker_size3)#, marker_line_width2fig.update_layout(title{}{}极坐标图.format(title,titlesname),#yaxis_zerolineFalse, #xaxis_zerolineFalse,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,)),width1000,height800,#xaxis_title角度,#yaxis_title随机误差(mm),templateplotly_white)#template换主题return figdef ScatterPlotly(data,xname,yname,xtitle,ytitle,groupnames,legendgroupnumber,text,legendtxt,title,znameFalse):# err:固定误差散点图动态图--------data:dataframexname:str,需要画图的x轴列名yname:str,需要画图的y轴列名xtitle:strytitle:strgroupnames:list,需要分组的列名legendgroupnumber:int,lengendgroup在groupnames的位置text:list,[文字,col]legendtxt:legendtext的标注默认为 title:标题前面要增加的字符zname:列表xyname:列表另外的xnameynamefiggo.Figure()textcol[text[1]] if type(text[1])str else text[1]znamecol[] if znameFalse else znameplot_columns[xname,yname]groupnamestextcolznamecolplot_columnslist(set(plot_columns))GroupDatadata.groupby(groupnames)legendgroupnames[]for key,MidData in GroupData:if isinstance(key, tuple):legendgroupstr(key[legendgroupnumber])else:legendgroupstr(key)showlegendTrue if legendgroup not in legendgroupnames else FalsexMidData[xname]yMidData[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(xx,yy,modemarkers,namelegendtxtlegendgroup,showlegendshowlegend,legendgrouplegendgroup,texttexts#go.scattergl:大容量数据,showlegendFalse),)if zname !False:for zn in zname:zMidData[zn]fig.add_trace(go.Scattergl(xx,yz,modemarkers,namelegendtxtlegendgroup_zn,showlegendshowlegend,legendgrouplegendgroup,texttexts#go.scattergl:大容量数据,showlegendFalse),)legendgroupnames.append(legendgroup)fig.update_traces(modemarkers,marker_size3)#, marker_line_width2fig.update_layout(title{}{}和{}的散点图.format(title,xtitle,ytitle),yaxis_zerolineFalse, xaxis_zerolineFalse,width1000,height600,xaxis_titlextitle,yaxis_titleytitle,templateplotly_white)#template换主题return fig代码块解析
for key,MidData in GroupData:if isinstance(key, tuple):legendgroupstr(key[legendgroupnumber])else:legendgroupstr(key)这段代码是Python中的一部分它遍历一个名为GroupData的可迭代对象可能是一个列表、元组或其他可迭代对象该对象包含键值对。对于GroupData中的每一对键值对它都会执行一些操作具体取决于键的类型。for key, MidData in GroupData:这一行是一个for循环用于遍历GroupData中的每一项。它假设GroupData是一个由键值对组成的可迭代对象如列表的列表、元组的元组等。每次迭代中key会被赋值为当前的键MidData会被赋值为对应的值。
if isinstance(key, tuple):这一行检查key是否是一个元组。isinstance()函数用于检查对象的类型是否是指定类型在这种情况下是元组。
legendgroupstr(key[legendgroupnumber])如果key是一个元组这一行会执行。它取key中的第legendgroupnumber个元素这里假设legendgroupnumber是一个已定义的变量并将其转换为字符串。然后它将这个字符串赋值给legendgroup变量。
else:如果key不是一个元组那么会执行这个else块。
legendgroupstr(key)在else块中key被转换为字符串并赋值给legendgroup变量。
这段代码的主要目的是根据key的类型是否是元组来设置legendgroup变量的值。如果key是元组它会取元组中的特定元素否则它会直接使用key的值。这通常用于数据可视化中特别是在设置图例组legend group时根据数据的不同属性如类别、分组等来区分不同的数据系列。