Python做的交互式动态大图,真漂亮!

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入


今天给大家分享1个pyecharts交互式动态可视化案例,通过先拆分、后组合的方式,一步步教你如何实现,具体成果如下。

 

一、绘制基本图形

用pandas读取数据,通过整合数据格式,分别用pyecharts绘制地图、柱状图、饼图,具体内容如下:

1.绘制地图

import pyecharts.options as opts
from pyecharts.globals import ThemeType
from pyecharts.commons.utils import JsCode
from pyecharts.charts import Timeline, Grid, Bar, Map, Pie
import pandas as pd
data = pd.read_excel('全国各省财政收入.xlsx',index_col=0)
years=list(data.keys()) #获取列名
citys=list(data.index)    #获取索引行名
citys=[city.replace('省','').replace('市','').replace('自治区','') for city in citys]
datas=[]
for y in years:
    dict_year={}
    dict_year['time']=y
    data_list=[[i,j] for i,j in zip(citys,list(data[y]))]
    dict_year['data']=sorted(data_list, key=(lambda x: x[1]),reverse=True)
    datas.append(dict_year)
map_data = [i["data"] for i in datas if i["time"]==2010][0]
min_data, max_data = (
        min([d[1] for d in map_data]),
        max([d[1] for d in map_data]),
    )
map_chart = (
        Map(init_opts=opts.InitOpts(theme=ThemeType.DARK))
        .add(
            series_name="",
            data_pair=map_data,
            label_opts=opts.LabelOpts(is_show=False),
            is_map_symbol_show=False,
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(
                title="2000年以来中国各省GDP排名变化情况",
                subtitle="GDP单位:亿元",
                pos_left="center",
                pos_top="top",
                title_textstyle_opts=opts.TextStyleOpts(
                    font_size=25, color="rgba(123,104,238, 0.9)"
                ),
            ),
            visualmap_opts=opts.VisualMapOpts(
                is_calculable=True,
                dimension=0,
                pos_left="10",
                pos_top="center",
                range_text=["High", "Low"],
                range_color=["lightskyblue", "yellow", "orangered"],
                textstyle_opts=opts.TextStyleOpts(color="#ddd"),
                min_=min_data,
                max_=max_data,
            ),
        )
    )
map_chart.render_notebook()

2.绘制柱状图

map_data = [i["data"] for i in datas if i["time"]==y][0]
min_data, max_data = (
    min([d[1] for d in map_data]),
    max([d[1] for d in map_data]),
)
bar_x_data = [x[0] for x in map_data]
bar_y_data = [x[1] for x in map_data]
bar = (
        Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
        .add_xaxis(xaxis_data=bar_x_data)
        .add_yaxis(
            series_name="",
            yaxis_data=bar_y_data,
            label_opts=opts.LabelOpts(
                is_show=True, position="right", formatter="{b}: {c}"
            ),
        )
        .reversal_axis()
        .set_global_opts(
            title_opts=opts.TitleOpts(
                title="2000年以来中国各省GDP排名变化情况",
                subtitle="GDP单位:亿元",
                pos_left="center",
                pos_top="top",
                title_textstyle_opts=opts.TextStyleOpts(
                    font_size=25, color="rgba(123,104,238, 0.9)"
                ),
            ),
            xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(is_show=False)),
            yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(is_show=False)),
            tooltip_opts=opts.TooltipOpts(is_show=False),
            visualmap_opts=opts.VisualMapOpts(
                is_calculable=True,
                dimension=0,
                pos_left="10",
                pos_top="center",
                range_text=["High", "Low"],
                range_color=["lightskyblue", "yellow", "orangered"],
                textstyle_opts=opts.TextStyleOpts(color="#ddd"),
                min_=min_data,
                max_=max_data,
            ),
        )
    )
bar.render_notebook()

3.绘制饼图

pie_data = [[x[0], x[1]] for x in map_data]
percent_sum = sum([x[1] for x in map_data])
rest_value = 0
for d in map_data:
    rest_percent = 100.0
    rest_percent = rest_percent - percent_sum
    rest_value = d[1] * (rest_percent / d[1])
pie = (
    Pie(init_opts=opts.InitOpts(theme=ThemeType.DARK))
    .add(
        series_name="",
        data_pair=pie_data,
        radius=["12%", "20%"],
        center=["50%", "50%"],
        itemstyle_opts=opts.ItemStyleOpts(
            border_width=1, border_color="rgba(0,0,0,0.3)"
        ),
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(
                title="2000年以来中国各省GDP排名变化情况",
                subtitle="GDP单位:亿元",
                pos_left="center",
                pos_top="top",
                title_textstyle_opts=opts.TextStyleOpts(
                    font_size=25, color="rgba(123,104,238, 0.9)"
                ),
            ),
        tooltip_opts=opts.TooltipOpts(is_show=True, formatter="{b} {d}%"),
        legend_opts=opts.LegendOpts(is_show=False),
    )
)
pie.render_notebook()

二、绘制动图

在基本图形的基础上,引入timeline函数,绘制相应动态图形:

1.绘制动态地图

def get_year_chart(year: int):
    map_data = [i["data"] for i in datas if i["time"]==year][0]
    min_data, max_data = (
            min([d[1] for d in map_data]),
            max([d[1] for d in map_data]),
        )
    map_chart = (
            Map(init_opts=opts.InitOpts(theme=ThemeType.DARK))
            .add(
                series_name="",
                data_pair=map_data,
                label_opts=opts.LabelOpts(is_show=False),
                is_map_symbol_show=False,
            )
            .set_global_opts(
                title_opts=opts.TitleOpts(
                    title="{}年以来中国各省GDP排名情况".format(year),
                    subtitle="GDP单位:亿元",
                    pos_left="center",
                    pos_top="top",
                    title_textstyle_opts=opts.TextStyleOpts(
                        font_size=25, color="rgba(123,104,238, 0.9)"
                    ),
                ),
                visualmap_opts=opts.VisualMapOpts(
                    is_calculable=True,
                    dimension=0,
                    pos_left="10",
                    pos_top="center",
                    range_text=["High", "Low"],
                    range_color=["lightskyblue", "yellow", "orangered"],
                    textstyle_opts=opts.TextStyleOpts(color="#ddd"),
                    min_=min_data,
                    max_=max_data,
                ),
            )
        )
    return map_chart
time_list = list(range(2000,2020))
timeline = Timeline(
    init_opts=opts.InitOpts(width="1000px", height="800px", theme=ThemeType.DARK)
)
for y in time_list:
    g = get_year_chart(year=y)
    timeline.add(g, time_point=str(y))

timeline.add_schema(
    orient="vertical",
    is_auto_play=True,
    is_inverse=True,
    play_interval=500,
    pos_left="null",
    pos_right="5",
    pos_top="20",
    pos_bottom="20",
    width="50",
    label_opts=opts.LabelOpts(is_show=True, color="#fff"),
)
timeline.render_notebook()

2.绘制动态柱状图

def get_year_chart(year: int):
    map_data = [i["data"] for i in datas if i["time"]==year][0]
    min_data, max_data = (
        min([d[1] for d in map_data]),
        max([d[1] for d in map_data]),
    )
    bar_x_data = [x[0] for x in map_data]
    bar_y_data = [x[1] for x in map_data]
    bar = (
            Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
            .add_xaxis(xaxis_data=bar_x_data)
            .add_yaxis(
                series_name="",
                yaxis_data=bar_y_data,
                label_opts=opts.LabelOpts(
                    is_show=True, position="right", formatter="{b}: {c}"
                ),
            )
            .reversal_axis()
            .set_global_opts(
                title_opts=opts.TitleOpts(
                    title="2000年以来中国各省GDP排名变化情况",
                    subtitle="GDP单位:亿元",
                    pos_left="center",
                    pos_top="top",
                    title_textstyle_opts=opts.TextStyleOpts(
                        font_size=25, color="rgba(123,104,238, 0.9)"
                    ),
                ),
                xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(is_show=False)),
                yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(is_show=False)),
                tooltip_opts=opts.TooltipOpts(is_show=False),
                visualmap_opts=opts.VisualMapOpts(
                    is_calculable=True,
                    dimension=0,
                    pos_left="10",
                    pos_top="center",
                    range_text=["High", "Low"],
                    range_color=["lightskyblue", "yellow", "orangered"],
                    textstyle_opts=opts.TextStyleOpts(color="#ddd"),
                    min_=min_data,
                    max_=max_data,
                ),
            )
        )
    return bar
time_list = list(range(2000,2020))
timeline = Timeline(
    init_opts=opts.InitOpts(width="1000px", height="800px", theme=ThemeType.DARK)
)
for y in time_list:
    g = get_year_chart(year=y)
    timeline.add(g, time_point=str(y))

timeline.add_schema(
    orient="vertical",
    is_auto_play=True,
    is_inverse=True,
    play_interval=500,
    pos_left="null",
    pos_right="5",
    pos_top="20",
    pos_bottom="20",
    width="50",
    label_opts=opts.LabelOpts(is_show=True, color="#fff"),
)
timeline.render_notebook()

3.绘制动态饼图

def get_year_chart(year: int):
    map_data = [i["data"] for i in datas if i["time"]==year][0]
    min_data, max_data = (
        min([d[1] for d in map_data]),
        max([d[1] for d in map_data]),
    )
    pie_data = [[x[0], x[1]] for x in map_data]
    percent_sum = sum([x[1] for x in map_data])
    rest_value = 0
    for d in map_data:
        rest_percent = 100.0
        rest_percent = rest_percent - percent_sum
        rest_value = d[1] * (rest_percent / d[1])
    pie = (
        Pie(init_opts=opts.InitOpts(theme=ThemeType.DARK))
        .add(
            series_name="",
            data_pair=pie_data,
            radius=["12%", "20%"],
            center=["50%", "50%"],
            itemstyle_opts=opts.ItemStyleOpts(
                border_width=1, border_color="rgba(0,0,0,0.3)"
            ),
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(
                    title="2000年以来中国各省GDP排名变化情况",
                    subtitle="GDP单位:亿元",
                    pos_left="center",
                    pos_top="top",
                    title_textstyle_opts=opts.TextStyleOpts(
                        font_size=25, color="rgba(123,104,238, 0.9)"
                    ),
                ),
            tooltip_opts=opts.TooltipOpts(is_show=True, formatter="{b} {d}%"),
            legend_opts=opts.LegendOpts(is_show=False),
        )
    )
    return pie
time_list = list(range(2000,2020))
timeline = Timeline(
    init_opts=opts.InitOpts(width="1000px", height="800px", theme=ThemeType.DARK)
)
for y in time_list:
    g = get_year_chart(year=y)
    timeline.add(g, time_point=str(y))

timeline.add_schema(
    orient="vertical",
    is_auto_play=True,
    is_inverse=True,
    play_interval=500,
    pos_left="null",
    pos_right="5",
    pos_top="20",
    pos_bottom="20",
    width="50",
    label_opts=opts.LabelOpts(is_show=True, color="#fff"),
)
timeline.render_notebook()

三、合并动图

最后,通过grid模块将三个图形合并到一起:

 

 

交互式动态图到此就做好了,你学废了吗?

### 回答1: 是的,有很多关于交互式数据大屏的 Python 案例。 一些常用的库可以制作交互式数据大屏,如 Plotly、Bokeh、Dash。 这些库可以制作多种图表,包括条形图、散点图、折线图等,并且可以与用户进行交互,比如可以动态调整图表的大小、颜色等。 如果你想学习如何制作交互式数据大屏,可以参考官方文档或搜索一些教程。 可以结合您的数据进行实际操作,以便对如何使用这些库有更深入的了解。 ### 回答2: 是的,有许多基于Python交互式数据大屏案例。Python是一种功能强大的编程语言,具有丰富的数据分析和可视化工具。以下是一些常见的交互式数据大屏Python案例: 1. 使用Plotly库创建交互式数据大屏:Plotly是一个用于创建漂亮交互式图表和数据可视化的库。您可以使用Plotly创建各种图表,如折线图、散点图、热图等,并将其集成到数据大屏中。通过添加事件处理器和交互式控件,用户可以与数据进行交互,探索和分析数据。 2. 使用Dash库创建交互式数据大屏:Dash是一个基于Python的Web应用框架,用于构建交互式数据大屏。您可以使用Dash将数据可视化组件(如图表、表格)和HTML组件结合起来,创建具有交互功能的数据大屏。Dash还提供了丰富的布局和样式选项,使您能够定制数据大屏的外观和布局。 3. 使用Bokeh库创建交互式数据大屏:Bokeh是一个用于构建交互式数据可视化的Python库。它提供了丰富的图表类型和数据可视化工具,支持交互式控件(如滑块、下拉菜单)和回调函数,使用户能够与数据进行互动和探索。 这些案例都是基于Python交互式数据大屏的示例,通过这些工具,您可以根据需要创建交互式和可视化效果丰富的数据大屏。无论是用于数据分析、数据监控、数据展示还是决策支持,这些工具都可以帮助您实现出色的交互式数据大屏项目。 ### 回答3: 是的,有许多交互式数据大屏的Python案例。Python作为一种功能强大且易于使用的编程语言,被广泛应用于数据可视化和大屏展示领域。 其中一个著名的案例是使用Python的Dash框架创建交互式数据大屏。Dash是基于React.js和Flask的组合而成的框架,可以帮助用户快速构建交互式数据可视化应用。通过Dash,用户可以使用Python编写代码来定义各种数据图表、数据表格和交互控件,从而构建出具有丰富交互功能的数据大屏。 另一个常见的案例是使用Python的Bokeh库创建交互式数据大屏。Bokeh是一个用于数据可视化的Python库,可以生成具有高度交互性的图形和图表。通过Bokeh,用户可以使用Python语法定义数据图表的各种属性,并为图表添加交互工具(如缩放、平移、选择等),使得用户能够自由地探索和分析数据。 此外,还有其他许多Python库和框架可用于创建交互式数据大屏,如Plotly、Matplotlib和Streamlit等。这些工具可以帮助用户以更直观、可交互的方式展示数据,从而更好地传达信息和洞察力。 总之,交互式数据大屏的Python案例非常丰富,用户可以根据自己的需求和技术水平选择适合自己的库或框架来实现交互式数据大屏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值