px.scatter标记大小配置异常:仅显示首府城市问题咨询
问题分析与修复方案
嗨,我来帮你排查下代码里的问题~你现在只看到首府城市,主要有两个核心原因:
1. 初始size='capital'的自动缩放坑
当你在px.scatter里设置size='capital'时,Plotly会自动根据capital列的数值来缩放标记大小。因为你的capital值是0和1,非首府(0)的标记会被缩放到几乎看不见的极小尺寸,所以视觉上看起来只有首府(1)显示出来了。
2. Selector的类型不匹配问题
你用selector={'capital': '0'}和'1'来筛选点,但如果你的capital列是数值类型(比如int),这个字符串条件就匹配不到任何非首府的点,导致update_traces对非首府的大小修改根本没生效,它们还是保持初始的极小状态。
修复后的代码方案
我给你两种可行的修复方式,选一种适合你的就行:
方案一:直接用update_traces分别设置大小(推荐)
先去掉初始的size参数,确保selector的条件和数据类型完全一致:
import plotly.express as px # 先确保capital是数值类型(如果你的数据里是字符串格式,先转成int) dados['capital'] = dados['capital'].astype(int) fig = px.scatter(dados, x='longitude', y='latitude', title='Mapa', color='uf') # 设置非首府城市的标记大小 fig.update_traces(marker={'size': 10}, selector={'capital': 0}) # 设置首府城市的标记大小(比非首府更大) fig.update_traces(marker={'size': 20}, selector={'capital': 1}) fig.show()
方案二:自定义size列
提前给每个城市分配好对应的标记大小,再传给size参数,逻辑更直观:
import plotly.express as px # 新增一列,直接指定首府和非首府的标记尺寸 dados['marker_size'] = dados['capital'].apply(lambda x: 20 if x == 1 else 10) fig = px.scatter(dados, x='longitude', y='latitude', title='Mapa', color='uf', size='marker_size') fig.show()
这样修改后,你就能同时看到首府和非首府城市,而且首府的标记会明显更大啦~
内容的提问来源于stack exchange,提问作者Beatrice de Melo Silva
相关产品推荐
相关产品推荐

