狮驼岭大大王 2023-03-25 13:49 采纳率: 100%
浏览 73
已结题

pyecharts实现timeline联动添加第三个bar图的时候报错

最近想用pyecharts做一个简单的可联动的数据大屏。

img


目前已通过timeline+Grid结合的方式实现了Map图和Pie图的联动显示,但在往Grid()添加Bar()的时候老是报错。
报错信息如下:

img


通过多次尝试方向,当只导入Pie图和Bar图可以成功,但只导入Map图和Bar图就又是上面这种报错信息,似乎两者有点不对付。

作为猛xin,将目前屎一样代码防止下方,供各位帮忙解决。目的就是想将Bar加入到具有Timeline联动功能的Grid中,谢谢。

import os
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line, Liquid, Page, Pie,Timeline,Map,WordCloud
from pyecharts.commons.utils import JsCode
from pyecharts.components import Table
from pyecharts.faker import Faker
from pyecharts.globals import ThemeType
import jieba
from pyecharts import options as opts
from pyecharts.charts import Map, Timeline, Pie
from pyecharts.faker import Faker

os.chdir(r'C:\Users\XX\Desktop')
data_park = pd.DataFrame(pd.read_csv('公园情绪数据库2.csv'))
data_park_need = data_park[['公园名', '公园类','县级名','OID_','评论内', '经度', '纬度', '地理位', 'score', 'keywork', 'ID', '分词', '功能类','交通出', '设施设', '生态环', '空间要', '商业业', '历史文', '面积']]


parkclass_data = data_park_need['score'].groupby([data_park_need['公园类'],data_park_need['县级名']]).mean().reset_index()
parkclass_list = parkclass_data['公园类'].drop_duplicates().reset_index()
parkclass_list = parkclass_list['公园类']
#按类型进行区分
##按类型测算得分情况
parkmap_data = data_park_need['score'].groupby([data_park_need['县级名'],data_park_need['公园类']]).mean().reset_index()
parkmap_data['score'] = parkmap_data['score'].round(3)
##按类型测算排名情况
rank = data_park_need['score'].groupby([data_park_need['公园名'],data_park_need['公园类'],data_park_need['县级名']]).mean().reset_index()
rank_010 = rank.sort_values(by=['score'])


def make_Bar(T_df):
    t = (
    Bar()
    .add_xaxis(list(T_df["公园名"]))
    .add_yaxis('得分情况',list(T_df["score"]))
    )
    print('已完成倒数排行图')
    return t

def make_Map(m_df):
    data_park_qu = m_df['score'].groupby(m_df['县级名']).mean().reset_index()
    c = (
    Map(init_opts = opts.InitOpts(chart_id = 'Map',width = "280px",height='160px'))
    .add("公园情绪", 
        [list(z) for z in zip(data_park_qu.县级名, data_park_qu.score)],
         "XX",
         layout_center = ['20%','30%'],
         layout_size = '400',
         is_roam = False,
         label_opts = opts.LabelOpts(font_size = 10.5),
         )
    .set_global_opts(
                    title_opts = opts.TitleOpts(title="XX市中心城区公园",pos_left='center'),
                    visualmap_opts = opts.VisualMapOpts(min_ = 0.1, max_ = 1),
                    legend_opts = opts.LegendOpts(is_show = False)
                    )
    )
    print('已完成区市县级地图')
    return c
def make_pie(b_df):
    data_bark = b_df['score'].groupby(b_df['县级名']).mean().reset_index()
    pie = (
    Pie(init_opts = opts.InitOpts(chart_id = 'pie',width = "280px",height='160px'))
    .add(
        "中心城区不同类型公园情绪得分",
        [list(z) for z in zip(b_df.县级名, b_df.score)],
        center=["20%", "75%"],
        is_still_show_zero_sum=False,
        radius = "30%",
        )
    .set_global_opts(
        legend_opts = opts.LegendOpts(is_show = False)
        )
    )
    print('已完成饼图')
    return pie


tl = Timeline(init_opts=opts.InitOpts(width="1388px", height="790px", theme=ThemeType.DARK))

for i in range(0,5):
    parkmap = (
        make_Map(parkmap_data[parkmap_data['公园类'] == str(parkclass_list[i])])
        )
    parkpie = (
        make_pie(parkmap_data[parkmap_data['公园类'] == str(parkclass_list[i])])
        )
    parkrank =(
        make_Bar(rank_010[rank_010['公园类'] == str(parkclass_list[i])])
        )
    grid = Grid()
    grid.add(parkmap,grid_opts=opts.GridOpts())
    grid.add(parkpie,grid_opts=opts.GridOpts())
    grid.add(parkrank,grid_opts=opts.GridOpts())
    tl.add(grid,"{}".format(str(parkclass_list[i])))

tl.render("timeline_pie.html")

  • 写回答

6条回答 默认 最新

  • JoseKe 2023-03-26 20:24
    关注

    问题分析:
    根据报错信息,可以看出是因为在添加第三个图表时,没有指定其所属的 Grid,导致程序无法确定其位置。具体来说,是在以下代码中出现问题:

    python
    grid = Grid()
    grid.add(parkmap,grid_opts=opts.GridOpts())
    grid.add(parkpie,grid_opts=opts.GridOpts())
    grid.add(parkrank,grid_opts=opts.GridOpts())

    在这里,我们创建了一个 Grid 对象,并向其中添加了三个图表。但是,我们没有指定第三个图表所属的 Grid,因此程序无法确定其位置,从而报错。
    解决方案:
    要解决这个问题,我们需要在添加第三个图表时,指定其所属的 Grid。具体来说,可以将代码修改为以下形式:

    python
    grid1 = Grid()
    grid1.add(parkmap,grid_opts=opts.GridOpts())
    grid1.add(parkpie,grid_opts=opts.GridOpts()) grid2 = Grid()
    grid2.add(parkrank,grid_opts=opts.GridOpts()) tl.add(grid1, "{}".format(str(parkclass_list[i])))
    tl.add(grid2, "{}".format(str(parkclass_list[i])))

    在这里,我们创建了两个 Grid 对象,分别用于存放前两个图表和第三个图表。然后,我们将这两个 Grid 对象分别添加到 Timeline 中,并指定它们所属的时间点。这样,就可以解决报错问题了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 4月6日
  • 已采纳回答 3月29日
  • 创建了问题 3月25日

悬赏问题

  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。