如何正确配置Snowflake Streamlit散点图输入?解决图表无数据问题
问题排查与解决
原始数据
| 姓名 | 日期 | 10% | 20% | 30% | ... | 100% |
|---|---|---|---|---|---|---|
| Anne | 1/1/24 | 3 | 5 | 1 | ... | 92 |
| Anne | 1/2/24 | 4 | 8 | 2 | ... | 78 |
| Anne | 1/3/24 | 7 | 9 | 6 | ... | 47 |
需求目标
- 图表标题为唯一姓名(示例为Anne)
- X轴为百分比列(10%、20%...100%)
- Y轴为各百分比对应的数值
- 数据点颜色按日期区分
错误代码问题分析
你写的代码有两个核心问题:
- 数据格式不匹配:当前DataFrame是宽格式(每行对应一个日期的所有百分比数据),但散点图需要长格式(每行对应一个(百分比,数值)的独立数据点,同时关联姓名和日期)。宽格式下
st.scatter_chart无法正确识别你要的X轴维度。 - 参数配置错误:你把
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
相关产品推荐
相关产品推荐

