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

如何正确配置Snowflake Streamlit散点图输入?解决图表无数据问题

问题排查与解决

原始数据

姓名日期10%20%30%...100%
Anne1/1/24351...92
Anne1/2/24482...78
Anne1/3/24796...47

需求目标

  • 图表标题为唯一姓名(示例为Anne)
  • X轴为百分比列(10%、20%...100%)
  • Y轴为各百分比对应的数值
  • 数据点颜色按日期区分

错误代码问题分析

你写的代码有两个核心问题:

  1. 数据格式不匹配:当前DataFrame是宽格式(每行对应一个日期的所有百分比数据),但散点图需要长格式(每行对应一个(百分比,数值)的独立数据点,同时关联姓名和日期)。宽格式下st.scatter_chart无法正确识别你要的X轴维度。
  2. 参数配置错误:你把x设为DATE,和需求里X轴用百分比的要求完全相反;另外y参数的列表末尾少了闭合方括号(虽你说没报错,大概率是输入笔误,但核心问题还是数据结构)。

修正代码

import streamlit as st
import pandas as pd

# 加载你的数据(示例用模拟数据)
df = pd.DataFrame({
    "姓名": ["Anne", "Anne", "Anne"],
    "日期": ["1/1/24", "1/2/24", "1/3/24"],
    "10%": [3, 4, 7],
    "20%": [5, 8, 9],
    "30%": [1, 2, 6],
    "100%": [92, 78, 47]
})

# 将宽格式数据转换为长格式,适配散点图需求
df_long = pd.melt(
    df,
    id_vars=["姓名", "日期"],  # 保留不需要转换的列
    var_name="百分比",        # 原百分比列的列名转为新列"百分比"
    value_name="数值"         # 原百分比列的数值转为新列"数值"
)

# 设置图表标题:提取唯一姓名
unique_name = df["姓名"].unique()[0]
st.title(f"{unique_name}的百分比数值散点图")

# 绘制符合需求的散点图
st.scatter_chart(
    df_long,
    x="百分比",  # X轴用转换后的"百分比"列
    y="数值",    # Y轴用转换后的"数值"列
    color="日期" # 按日期区分数据点颜色
)

修正说明

  • 用pd.melt把宽表转成了长表,每个百分比和对应的数值成为独立行,这样散点图能正确识别每个数据点的X(百分比)和Y(数值)维度。
  • 调整了st.scatter_chart的参数,完全匹配你的需求:X轴为百分比,Y轴为数值,颜色区分日期,标题用唯一姓名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:40:07