很多时候,一张炫酷的图片胜过千言万语。对于数学科学家来说,当我们要表达自己的观点和劳动成果时,需要直接有效的沟通。单调的文字和数字很难引起别人的注意。飘逸明亮的视觉动态图形是必不可少的,至少是加分项。本文将基于Python的Plotly图形库来介绍工作中常用的几种动画图形和交互图标。使用前检查是否安装了Plotly。1.日出图层级数据通常存储为一个矩形数据框,其中不同的列对应不同的层级。px.sunburst可以采用与列列表对应的路径参数。请注意,如果给定了id,父级不应提供路径。importplotly.expressaspxdf=px.data.tips()fig=px.sunburst(df,path=['day','time','sex'],values='total_bill')fig.show()2.Sunburst的Tusankey图通过定义可视化对流量的贡献源来表示源节点,target为目标节点,value用于设置流量,label显示节点名称,常用于流量分析.importplotly.graph_objectsasgoimporturllib,jsonurl='https://raw.githubusercontent.com/plotly/plotly.js/master/test/image/mocks/sankey_energy.json'response=urllib.request.urlopen(url)data=json.loads(response.read())#overridegraylinkcolorswith'source'colorsopacity=0.4#change'magenta'toits'rgba'valuetoaddopacitydata['data'][0]['node']['color']=['rgba(255,0,255,0.8)'ifcolor=="magenta"elsecolorforcolorindata['data'][0]['node']['color']]data['data'][0]['link']['color']=[data['data'][0]['node']['color'][src].replace("0.8",str(opacity))forsrcindata['data'][0]['link']['source']]fig=go.Figure(data=[go.Sankey(valueformat=".0f",valuesuffix="TWh",#Definenodesnode=dict(pad=15,thickness=15,line=dict(color="black",width=0.5),label=data['data'][0]['node']['label'],color=data['data'][0]['node']['color']),#Addlinkslink=dict(source=data['data'][0]['link']['source'],target=data['data'][0]['link']['目标'],值=数据['data'][0]['link']['value'],label=data['data'][0]['link']['label'],color=data['data'][0]['link']['color']))])fig.update_layout(title_text="Energyforecastfor2050
来源:DepartmentofEnergy&ClimateChange,TomCounsellviaMikeBostock",font_size=10)fig.show()效果图3.雷达图雷达图(又称蛛网图或星图)显示以中轴为起点的代表定量变量的二维图形。正式多元数据轴的相对位置和角度通常是无用的。它相当于一个轴呈放射状排列的平行坐标图。importplotly.graph_objectsasgoimporturllib,jsonurl='https://raw.githubusercontent.com/plotly/plotly.js/master/test/image/mocks/sankey_energy.json'response=urllib.request.urlopen(url)data=json.loads(response.read())#overridegraylinkcolorswith'source'colorsopacity=0.4#change'magenta'toits'rgba'valuetoaddopacitydata['data'][0]['node']['color']=['rgba(255,0,255,0.8)'ifcolor=="magenta"elsecolorforcolorindata['data'][0]['node']['color']]data['data'][0]['link']['color']=[data['data'][0]['node']['color'][src].replace("0.8",str(opacity))forsrcindata['data'][0]['link']['source']]fig=go.Figure(data=[go.Sankey(valueformat=".0f",valuesuffix="TWh",#Definenodesnode=dict(pad=15,thickness=15,line=dict(color="black",width=0.5),label=data['data'][0]['node']['label'],color=data['data'][0]['node']['color']),#Addlinkslink=dict(source=data['data'][0]['link']['source'],target=data['data'][0]['link']['目标'],值=数据['data'][0]['link']['value'],label=data['data'][0]['link']['label'],color=data['data'][0]['link']['color']))])fig.update_layout(title_text="Energyforecastfor2050
来源:DepartmentofEnergy&ClimateChange,TomCounsellviaMikeBostock",font_size=10)fig.show()效果图4.漏斗图漏斗图常被用来表示业务流程不同阶段的数据,在商业智能中,这是识别潜在的重要机制过程中的问题区域。例如,用于观察销售过程中各个阶段的收入或损失,并显示逐渐递减的数值。每个阶段都表示为所有值的百分比。fromplotlyimportgraph_objectsasgofig=go.Figure()fig.add_trace(go.Funnel(name='Montreal',y=["Websitevisit","Downloads","Potentialcustomers","Requestedprice"),x=[120,60,30,20],textinfo="value+percentinitial"))fig.add_trace(go.Funnel(name='Toronto',orientation="h",y=["Websitevisit","Downloads","Potentialcustomers","Requestedprice","invoicesent"],x=[100,60,40,30,20],textposition="inside",textinfo="value+percentprevious"))fig.add_trace(go.Funnel(name='Vancouver',orientation="h",y=["Websitevisit","Downloads","Potentialcustomers","Requestedprice","invoicesent","Finalized"],x=[90,70,50,30,10,5],textposition="outside",textinfo="value+percenttotal"))fig.show()效果图5.3Dsurfacemap带有等高线的Surfacemap,使用contours属性显示和自定义各轴的等高线数据。importplotly.graph_objects作为goimportpandasaspd#Readdatafromacsvz_data=pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv')fig=go.Figure(data=[go.Surface(z=z_data.values)])fig.update_traces(contours_z=dict(show=True,usecolormap=True,highlightcolor="limegreen",project_z=True))fig.update_layout(title='MtBrunoElevation',autosize=False,scene_camera_eye=dict(x=1.87,y=0.88,z=-0.64),width=500,height=500,margin=dict(l=65,r=50,b=65,t=90))图显示()6.动画图一些PlotlyExpress函数支持通过animation_frame和animation_group参数创建动画角色。这是使用PlotlyExpress创建的动画散点图的示例。请注意,您应该始终固定x_range和y_range以确保您的数据在整个动画过程中始终可见。importplotly.expressaspxdf=px.data.gapminder()px.scatter(df,x="gdpPercap",y="lifeExp",animation_frame="year",animation_group="country",size="pop",color="continent",hover_name="country",log_x=True,size_max=55,range_x=[100,100000],range_y=[25,90])结论可视化图形在日常工作中往往很实用,其中有使用Plotly的经验比较好。本文与您分享一些案例。情节可视化远不止于此。在后续的文章中,说到可视化部分,我们会介绍更多炫酷的可视化图形。喜欢点击观看分享,收藏以未雨绸缪。