pycharm地图轮播问题

自己解决不了了
怎样修改代码,让地图有数据的省份和下面的柱状图、饼图对应颜色,达到轮播的效果。
现在是,其他的都轮播,可是地图省份一直都一个颜色

没基础

“给出修改后的代码”

目前代码在图的下面

img

import pandas as pd
import openpyxl
import pyecharts.options as opts
from pyecharts.charts import Timeline, Grid, Bar, Map, Pie, Line
from pyecharts.commons.utils import JsCode
from pyecharts.globals import ThemeType

data=pd.read_excel('2006-2021年各省投资项目数.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']=sorted(data_list, key=(lambda x: x[1]),reverse=True)
    datas.append(dict_year)
print(datas)

def get_year_chart(year:int, total_num=None, data_mark=None, maxNum=None) -> object:
    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,
            zoom=2,
            center=[119.5, 34.5],
            label_opts=opts.LabelOpts(is_show=False),
            is_map_symbol_show=False,
            itemstyle_opts={
                "normal": {"areaColor": "#EE82EE", "borderColor": "#404a59","label": {"show": citys}},
                "emphasis": {
                    "label": {"show": citys},
                    "areaColor": "rgba(255,255,255, 0.5)",
                },
            },
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(
                title="{}年全国各省投资项目数".format(year),
                subtitle="单位:个",
                pos_left="center",
                pos_top="top",
                title_textstyle_opts=opts.TextStyleOpts(font_size=25, color='red'),

            ),
            tooltip_opts=opts.TooltipOpts(

                is_show=True,
                formatter=JsCode(
                    """function(params) {
                                        if ('value' in params.data) {
                                            return params.data.value[2] + ': ' + params.data.value[0];
                                        }
                                    }"""
                ),
            ),

            visualmap_opts=opts.VisualMapOpts(
                is_calculable=True,
                is_piecewise=True,
                dimension=0,
                pos_left="10",
                pos_top="center",
                range_text=["High","Low"],
                range_color=["lightskyblue", "yellow", "orangered","red"],
                textstyle_opts=opts.TextStyleOpts(color="#ddd"),
                min_=min_data,
                max_=max_data,
            ),
        )
    )

    # 绘制柱图
    bar_x_data=[x[0] for x in map_data]
    bar_y_data=[x[1] for x in map_data]
    bar = (
        Bar()
        .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(
            xaxis_opts=opts.AxisOpts(max_=maxNum,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","red"],
                textstyle_opts=opts.TextStyleOpts(color="#ddd"),
                min_=min_data,
                max_=max_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=["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(2006,2022))
timeline = Timeline(init_opts=opts.InitOpts(width="900px", height="400px", 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,     # 是否反向放置 timeline,反向则首位颠倒过来
    play_interval=1000,   # 表示播放的速度(跳动的间隔),单位毫秒(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')

citys=[city.replace('省','').replace('市','').replace('自治区','') for city in citys]
你把这个替换了不行的,省份名称就对不上了,所以没有数据传入。看你地图上的省份名称就知道了,都是带上省市自治区的

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632