You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shapelets DataApp选择器绑定后图表无显示问题求助

Shapelets DataApp 图表不显示问题排查与修复

关键问题分析

  • 参数类型不匹配:full_bar函数的第一个参数标注为dict,但实际传入的是Pandas DataFrame,类型注解错误会引发运行异常。
  • 筛选逻辑错误:cat = cat[selector]是试图选取列名为选中邮编的列,但你需要的是筛选对应邮编的行数据,正确写法应该是按postalCode列匹配选中值。
  • 数据格式处理错误:筛选后postalCode为单一值,此时用它作为id_vars做melt无法生成有效图表数据,需要明确指定要聚合的特征列。
  • 组件绑定错误:selector.bind(text, full_bar)的绑定方式不符合Shapelets规则,选择器只需绑定图表生成函数,无需同时绑定文本组件。

修复后的代码

import shapelets as sh
import pandas as pd
from shapelets.apps import AltairChart, DataApp
import altair as alt

app = DataApp(name="Test")

# 加载数据
cat = pd.read_csv("/root/Papa_johns/papa_person.csv")

def full_bar(selected_zip: str) -> AltairChart:
    # 筛选选中邮政编码的行
    filtered_cat = cat[cat['postalCode'] == selected_zip]
    
    # 提取除postalCode外的特征列(根据实际数据结构调整)
    feature_cols = [col for col in filtered_cat.columns if col != 'postalCode']
    # 转换为长格式数据,适配堆叠条形图
    melted_cat = pd.melt(filtered_cat, id_vars=['postalCode'], value_vars=feature_cols, 
                        var_name='Feature', value_name='Count')

    # 生成堆叠条形图
    chart = alt.Chart(melted_cat).mark_bar().encode(
        x='postalCode:N',
        y='Count:Q',
        color='Feature:N',
        tooltip=['postalCode:N', 'Feature:N', 'Count:Q']
    ).properties(width=600, height=400, 
                title=f'Bar Chart for Zipcode {selected_zip} by Feature').interactive()

    return app.altair_chart(chart=chart)

# 创建邮政编码选择器
selector = app.selector(title="Select the Postal Code", 
                       options=['33122','33125','33126','33127','33128','33129','33130','33131','33132','33133','33134','33135','33136','33137','33138','33139','33140','33141','33142','33143','33144','33145','33146','33147','33148','33149','33150','33151','33152','33153','33155','33156','33157','33161','33162','33165','33166','33167','33168','33169','33170','33172','33173','33174','33175','33176','33177','33178','33179','33180','33181','33182','33183','33184','33185','33186','33187','33188','33189','33190','33193','33194'])
app.place(selector)
text = app.text("choose your zipcode")

# 绑定选择器到图表生成函数
selector.bind(full_bar)

app.register()

额外注意事项

  1. 确认papa_person.csv中存在postalCode列,且列值与选择器中的字符串格式一致(比如都是字符串类型,没有数字/字符串不匹配的情况)。
  2. 如果不需要聚合所有非postalCode列,请手动指定feature_cols列表,避免包含非数值列导致图表渲染失败。
  3. 若选中的邮编在数据中无匹配项,图表会显示空白,可添加数据校验逻辑(比如判断filtered_cat是否为空)来提示用户。

内容的提问来源于stack exchange,提问作者Willam Singhs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 09:02:48