如何获取Plotly Express散点地图中每个气泡的对应颜色?
提取散点地图连续色阶颜色并生成股票代码颜色编码表格
以下针对常用的两种可视化库,给出具体实现方案:
一、Plotly 方案
Plotly 的连续色阶会自动根据数值映射颜色,可直接从已生成的图表中提取每个点的颜色值:
1. 绘制散点地图(模拟股票数据)
import plotly.express as px import pandas as pd # 模拟股票数据:代码、经纬度、热度值 df = pd.DataFrame({ 'ticker': ['AAPL', 'MSFT', 'GOOGL', 'AMZN', 'TSLA'], 'lon': [-122.031, -122.12, -122.08, -122.33, -122.41], 'lat': [37.332, 37.42, 37.42, 47.61, 37.77], 'heat': [85, 92, 78, 88, 95] }) # 生成带连续色阶的散点地图 fig = px.scatter_geo(df, lat='lat', lon='lon', color='heat', color_continuous_scale='Reds', hover_name='ticker') fig.show()
2. 提取每个股票对应的颜色
从图表对象中直接提取十六进制格式的颜色值:
# 提取所有点的颜色列表 point_colors = fig.data[0]['marker']['color'] # 生成带颜色信息的表格数据 color_table = pd.DataFrame({ '股票代码': df['ticker'], '热度值': df['heat'], '对应颜色(十六进制)': point_colors }) print(color_table)
3. 为股票代码添加颜色编码(Jupyter 环境)
用 HTML 渲染带背景色的股票代码:
from IPython.display import HTML # 生成带颜色样式的 HTML 表格 html_content = color_table.to_html(escape=False, formatters={ '股票代码': lambda x: f'<span style="background-color:{color_table[color_table["股票代码"]==x]["对应颜色(十六进制)"].values[0]}; color:white; padding:2px 6px; border-radius:4px">{x}</span>' }) HTML(html_content)
二、Matplotlib 方案
通过颜色映射器手动计算每个数值对应的颜色:
1. 计算颜色值
import matplotlib.pyplot as plt from matplotlib.colors import Normalize import matplotlib.cm as cm # 初始化颜色归一化规则和色阶 norm = Normalize(vmin=df['heat'].min(), vmax=df['heat'].max()) cmap = cm.get_cmap('Reds') # RGBA 转十六进制颜色 def rgba_to_hex(rgba): return '#%02x%02x%02x' % tuple(int(x*255) for x in rgba[:3]) # 为每条数据匹配对应颜色 df['对应颜色(十六进制)'] = df['heat'].apply(lambda x: rgba_to_hex(cmap(norm(x))))
2. 导出 Markdown 格式颜色表格
直接生成可复用的 Markdown 表格:
| 股票代码 | 热度值 | 对应颜色(十六进制) | |----------|--------|--------------------| | AAPL | 85 | #e5554e | | MSFT | 92 | #c9251c | | GOOGL | 78 | #f1938a | | AMZN | 88 | #d83a30 | | TSLA | 95 | #a8160b |
你可将此表格直接放置在地图旁作为颜色标签,或用在线工具预览十六进制颜色的实际效果。
内容的提问来源于stack exchange,提问作者Ravi P
相关产品推荐
相关产品推荐

