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

如何解决Altair绘图在VS Code中的异常显示问题

问题描述

我尝试绘制地理数据生成类地图可视化,测试代码可以正常生成可视化效果:

import numpy as np
import pandas as pd
import altair as alt

lats = np.random.uniform(51.5, 51.6, 100)
lons = np.random.uniform(-0.1, 0.1, 100)
months = np.arange(1, 13)
vouchers = np.random.randint(1, 100, 100)
test_df = pd.DataFrame({
    'lat': lats,
    'lon': lons,
    'month': np.random.choice(months, 100),
    'vouchers': vouchers
})

alt.Chart(test_df).mark_circle().encode(
    longitude='lon:Q',
    latitude='lat:Q',
    size='vouchers:Q',
    color='month:N'
)

但真实数据结构和类型与测试数据类似,使用以下代码在VS Code中绘图时出现异常显示:

alt.Chart(lunch_vouchers).mark_circle().encode(
    longitude='long_jittered:Q',
    latitude='lat_jittered:Q',
    size=alt.Size('Total_People_in_voucher:Q', scale=alt.Scale(range=[0, 1000]), legend=None),
    color=alt.value('red'),
    tooltip=['Postcode', 'Total_People_in_voucher', 'Month']
)
解决建议
  • 检查坐标范围与视图配置
    真实数据的经纬度可能范围过大/过小,导致点聚集或超出可视区域。先打印坐标列的统计值确认范围:

    print(lunch_vouchers[['long_jittered', 'lat_jittered']].describe())
    

    然后手动设置图表尺寸和投影参数,适配你的地理区域:

    alt.Chart(lunch_vouchers).mark_circle().encode(
        longitude='long_jittered:Q',
        latitude='lat_jittered:Q',
        size=alt.Size('Total_People_in_voucher:Q', scale=alt.Scale(range=[0, 1000]), legend=None),
        color=alt.value('red'),
        tooltip=['Postcode', 'Total_People_in_voucher', 'Month']
    ).properties(
        width=600,
        height=400
    ).project(
        type='mercator',
        scale=500000  # 根据实际坐标范围调整,小范围区域用大数值缩小视图
    )
    
  • 排查数据缺失或异常值
    数据中的NaN、极端值会导致渲染异常,执行以下代码检查并处理:

    # 检查缺失值数量
    print(lunch_vouchers[['long_jittered', 'lat_jittered', 'Total_People_in_voucher']].isna().sum())
    # 移除缺失值
    lunch_vouchers_clean = lunch_vouchers.dropna(subset=['long_jittered', 'lat_jittered', 'Total_People_in_voucher'])
    
  • 修复VS Code渲染环境

    • 升级依赖库到最新版本:
      pip install --upgrade altair vega-datasets
      
    • 在VS Code中更新Vega插件,确保渲染器正常工作。
    • 切换到HTML渲染器尝试:
      import altair as alt
      alt.renderers.enable('html')
      
    • 导出图表为HTML文件,验证是否是VS Code渲染问题:
      chart = alt.Chart(lunch_vouchers)...  # 你的完整图表代码
      chart.save('voucher_map.html')
      
  • 调整Size字段的缩放配置
    如果Total_People_in_voucher数值范围过小,设置的scale范围[0,1000]会导致点显示异常。调整scale的domain匹配实际数据范围:

    size=alt.Size('Total_People_in_voucher:Q', 
                  scale=alt.Scale(
                      domain=[lunch_vouchers['Total_People_in_voucher'].min(), 
                              lunch_vouchers['Total_People_in_voucher'].max()], 
                      range=[10, 500]  # 避免0值导致点不可见
                  ), 
                  legend=None)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 05:07:12