pyecharts交互式动态可视化案例_全国各省近20年GDP 动态展示

全国各省近20年GDP 动态展示
1. 数据描述:

数据存在EXCEL,命名为全国各省财政收入
在这里插入图片描述

2. 编写代码:
import pandas as pd
import openpyxl
from pyecharts.globals import ThemeType
import pyecharts.options as opts
from pyecharts.commons.utils import JsCode
from pyecharts.charts import Timeline, Grid, Bar, Map, Pie

data=pd.read_excel('全国各省财政收入.xlsx',engine='openpyxl',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']=data_list
    datas.append(dict_year)
print(datas)

def get_year_chart(year:int):
    map_data=[i['data'] for i in datas if i['time'] == year][0]
    map_data = sorted(map_data, key=(lambda x: x[1]), reverse=True)[:10] # 关键点(对柱形图展示有帮助)

    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)
            .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='blue')
            ),
            visualmap_opts=opts.VisualMapOpts(min_=min_data,
                                              max_=max_data,
                                              pos_left="10",
                                              pos_top="center",
                                              range_text=["High", "Low"],
                                              range_color=["lightskyblue", "yellow", "orangered"],
                                              textstyle_opts=opts.TextStyleOpts(color="#ddd"),
                                              )
        )
    )
    # 绘制柱图
    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="",
            y_axis=bar_y_data,
            label_opts=opts.LabelOpts(
                is_show=True, position="right", formatter="{b}: {c}"  # 关键知识点,解决标签显示不全的问题
            )
        )
            .reversal_axis()
            .set_global_opts(
            visualmap_opts=opts.VisualMapOpts(
                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
            )
        )

    )
    # 绘制饼图
    pie_data = [[x[0], x[1]] for x in map_data]
    pie = (
        Pie(init_opts=opts.InitOpts(theme=ThemeType.DARK))
        .add(
            series_name="",
            data_pair=pie_data,
            radius=["12%", "20%"],
            center=["80%", "90%"], # 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标
                                   # 默认设置成百分比,设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度
            itemstyle_opts=opts.ItemStyleOpts(
                border_width=1, border_color="rgba(0,0,0,0.3)"
            ),
        )
        .set_global_opts(
            tooltip_opts=opts.TooltipOpts(is_show=True, formatter="{b} {d}%"), # 关键点:提示框显示百分比
            legend_opts=opts.LegendOpts(is_show=False),
        )
    )
    # 三图合一
    grid_chart= (
        Grid()
        .add(bar,grid_opts=opts.GridOpts(pos_left="10", pos_right="45%", pos_top="70%", pos_bottom="5"))
        .add(pie, grid_opts=opts.GridOpts(pos_left="10", pos_right="45%", pos_top="70%", pos_bottom="5"))
        .add(map_chart, grid_opts=opts.GridOpts(pos_left="10", pos_right="10", pos_top="5%", pos_bottom="70"))
    )

    return grid_chart

time_list = list(range(2000,2020))
timeline = Timeline(init_opts=opts.InitOpts(width="900px", height="400px", theme=ThemeType.DARK))

# 开始编制时间轮播图
for y in time_list:
    g=get_year_chart(y)
    timeline.add(g,time_point=str(y))  

# 时间轮播图配置项设置
timeline.add_schema(
    orient="vertical",   # 时间轴的类型:垂直
    is_auto_play=True,   # 是否自动播放
    is_inverse=True,     # 是否反向放置 timeline,反向则首位颠倒过来
    play_interval=500,   # 表示播放的速度(跳动的间隔),单位毫秒(ms)
    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('timeline.html')
3.效果展示:

在这里插入图片描述
具体动态图形可到资源下载哦!

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值