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

Plotly Scattergeo自定义颜色映射异常:所有点显示黑色求助

问题原因及解决方法

问题根源

你当前的代码存在两个关键问题:

  • 颜色变量定义语法错误:colors colors=('#1e90ff','#ff8c00','#2e8b57') 是无效语法,正确写法应为 colors = ('#1e90ff','#ff8c00','#2e8b57')。
  • 直接将原始类别整数赋值给marker_color时,Plotly会把这些数值当作连续数值处理,而非离散类别,无法匹配你指定的颜色列表,最终导致所有点显示为默认黑色。

修正方案

要让不同类别对应指定颜色,需要把类别值映射到你定义的颜色列表索引,再为每个点分配对应颜色:

步骤1:修正颜色变量定义

先修复语法错误:

colors = ('#1e90ff','#ff8c00','#2e8b57')

步骤2:将类别映射为颜色索引

如果naics_two的取值不是0、1、2这类刚好对应颜色列表索引的数值,用pd.factorize把它转成从0开始的连续索引:

category_indices, _ = pd.factorize(combined_frame['naics_two'])

步骤3:为每个点分配对应颜色

修改Scattergeo的marker设置,通过列表推导式生成每个点的颜色:

fig = go.Figure(data=go.Scattergeo(
        lon = combined_frame['lon'],
        lat = combined_frame['lat'],
        text = combined_frame['tenant_name'] + '<br>' + combined_frame['facility_name'],
        mode = 'markers',
        marker = dict(
            color = [colors[i] for i in category_indices],
            size = 8  # 可选,调整点的显示大小
        )
))

完整修正代码

import plotly.graph_objects as go
import pandas as pd
import numpy as np

# 修正颜色变量定义
colors = ('#1e90ff','#ff8c00','#2e8b57')

# 将naics_two类别转成颜色列表的索引
category_indices, _ = pd.factorize(combined_frame['naics_two'])

fig = go.Figure(data=go.Scattergeo(
        lon = combined_frame['lon'],
        lat = combined_frame['lat'],
        text = combined_frame['tenant_name'] + '<br>' + combined_frame['facility_name'],
        mode = 'markers',
        marker = dict(
            color = [colors[i] for i in category_indices],
            size = 8
        )
))

fig.update_layout(
        title = 'Facility Locations<br>(Hover for tenant and facility names)',
        geo_scope='usa',
        showlegend=True  # 开启图例,可根据需求调整
)

fig.show()

补充说明

  • 若naics_two的类别数量和颜色列表长度不匹配,需要确保颜色列表包含所有类别的颜色,或者添加默认颜色逻辑。
  • 若要通过update_traces方法设置颜色,同样需要先生成每个点对应的颜色列表再传入:
fig.update_traces(marker=dict(color=[colors[i] for i in category_indices]))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:15:48