5种炫酷的数据可视动态图,用Python轻松实现(1)

文章介绍了如何使用Plotly库在Python中创建动态图表,如bar图、scatter图和sunburst图表,通过时间帧展示数据变化。通过实例展示了如何制作动画效果和利用groupby语句分解数据,强调了这些工具在数据探索和演示中的实用性。
摘要由CSDN通过智能技术生成

动画

在研究这个或那个指标的演变时,我们常涉及到时间数据。Plotly 动画工具仅需一行代码就能让人观看数据随时间的变化情况,如下图所示:

代码如下:

import plotly.express as px

from vega_datasets import data

df = data.disasters()

df = df[df.Year > 1990]

fig = px.bar(df,

y=“Entity”,

x=“Deaths”,

animation_frame=“Year”,

orientation=‘h’,

range_x=[0, df.Deaths.max()],

color=“Entity”)

improve aesthetics (size, grids etc.)

fig.update_layout(width=1000,

height=800,

xaxis_showgrid=False,

yaxis_showgrid=False,

paper_bgcolor=‘rgba(0,0,0,0)’,

plot_bgcolor=‘rgba(0,0,0,0)’,

title_text=‘Evolution of Natural Disasters’,

showlegend=False)

fig.update_xaxes(title_text=‘Number of Deaths’)

fig.update_yaxes(title_text=‘’)

fig.show()

只要你有一个时间变量来过滤,那么几乎任何图表都可以做成动画。下面是一个制作散点图动画的例子:

import plotly.express as px

df = px.data.gapminder()

fig = px.scatter(

df,

x=“gdpPercap”,

y=“lifeExp”,

animation_frame=“year”,

size=“pop”,

color=“continent”,

hover_name=“country”,

log_x=True,

size_max=55,

range_x=[100, 100000],

range_y=[25, 90],

color_continuous_scale=px.colors.sequential.Emrld

)

fig.update_layout(width=1000,

height=800,

xaxis_showgrid=False,

yaxis_showgrid=False,

paper_bgcolor=‘rgba(0,0,0,0)’,

plot_bgcolor=‘rgba(0,0,0,0)’)

太阳图

太阳图(sunburst chart)是一种可视化 group by 语句的好方法。如果你想通过一个或多个类别变量来分解一个给定的量,那就用太阳图吧。

假设我们想根据性别和每天的时间分解平均小费数据,那么相较于表格,这种双重 group by 语句可以通过可视化来更有效地展示。

这个图表是交互式的,让你可以自己点击并探索各个类别。你只需要定义你的所有类别,并声明它们之间的层次结构(见以下代码中的 parents 参数)并分配对应的值即可,这在我们案例中即为 group by 语句的输出。

import plotly.graph_objects as go

import plotly.express as px

import numpy as np

import pandas as pd

df = px.data.tips()

fig = go.Figure(go.Sunburst(

labels=[“Female”, “Male”, “Dinner”, “Lunch”, 'Dinner ', 'Lunch '],

parents=[“”, “”, “Female”, “Female”, ‘Male’, ‘Male’],

values=np.append(

df.groupby(‘sex’).tip.mean().values,

df.groupby([‘sex’, ‘time’]).tip.mean().values),

marker=dict(colors=px.colors.sequential.Emrld)),

layout=go.Layout(paper_bgcolor=‘rgba(0,0,0,0)’,

plot_bgcolor=‘rgba(0,0,0,0)’))

fig.update_layout(margin=dict(t=0, l=0, r=0, b=0),

title_text=‘Tipping Habbits Per Gender, Time and Day’)

fig.show()

现在我们向这个层次结构再添加一层:

为此,我们再添加另一个涉及三个类别变量的 group by 语句的值。

import plotly.graph_objects as go

import plotly.express as px

import pandas as pd

import numpy as np

df = px.data.tips()

fig = go.Figure(go.Sunburst(labels=[

“Female”, “Male”, “Dinner”, “Lunch”, 'Dinner ', 'Lunch ', ‘Fri’, ‘Sat’,

‘Sun’, ‘Thu’, 'Fri ', 'Thu ', 'Fri ', 'Sat ', 'Sun ', 'Fri ', 'Thu ’

],

parents=[

“”, “”, “Female”, “Female”, ‘Male’, ‘Male’,

‘Dinner’, ‘Dinner’, ‘Dinner’, ‘Dinner’,

‘Lunch’, ‘Lunch’, 'Dinner ', 'Dinner ',

'Dinner ', 'Lunch ', 'Lunch ’

],

values=np.append(

np.append(

df.groupby(‘sex’).tip.mean().values,

df.groupby([‘sex’,

‘time’]).tip.mean().values,

),

df.groupby([‘sex’, ‘time’,

‘day’]).tip.mean().values),

marker=dict(colors=px.colors.sequential.Emrld)),

layout=go.Layout(paper_bgcolor=‘rgba(0,0,0,0)’,

plot_bgcolor=‘rgba(0,0,0,0)’))

fig.update_layout(margin=dict(t=0, l=0, r=0, b=0),

title_text=‘Tipping Habbits Per Gender, Time and Day’)

fig.show()

平行类别

另一种探索类别变量之间关系的方法是以下这种流程图。你可以随时拖放、高亮和浏览值,非常适合演示时使用。

代码如下:

import plotly.express as px

from vega_datasets import data

import pandas as pd
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)

296f86381401c05e862fe4e9.png)

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)

img
  • 27
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值