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

Python散点图:如何实现同时展示颜色与尺寸编码的图例?

解决Matplotlib散点图图例同时展示颜色与尺寸编码的问题

要让图例同时体现尺寸和颜色的编码信息,你可以手动修改legend_elements生成的图例标记颜色,使其匹配对应intensity值的配色。具体实现如下:

  1. 先通过legend_elements(prop='sizes')获取尺寸对应的图例句柄和标签
  2. 从散点图的颜色映射(cmap)和归一化(norm)规则中,计算每个intensity值对应的颜色
  3. 遍历图例句柄,为每个标记设置对应颜色

修改后的完整代码:

import pandas as pd
import numpy as np
import pylab as pl

# 生成模拟数据
time = pd.DataFrame(np.random.rand(10))
intensity = pd.DataFrame(np.random.randint(1,5,10))
df = pd.concat([time, intensity], axis=1)

size = intensity.apply(lambda x: 10*x**2)

fig, ax = pl.subplots()
scat = ax.scatter(time, intensity, c=intensity, s=size)

# 获取尺寸图例的句柄和标签
handles, labels = scat.legend_elements(prop="sizes", num=3, 
                                       fmt="{x:.1f}", func=lambda s: np.sqrt(s/10))

# 提取图例标签对应的intensity数值
intensity_values = [float(label.split(': ')[1]) for label in labels]

# 为每个图例标记匹配对应颜色
for handle, val in zip(handles, intensity_values):
    handle.set_color(scat.cmap(scat.norm(val)))

# 添加修改后的图例
ax.legend(handles, labels, title="intensity")
pl.show()

关键说明:

  • scat.cmap(scat.norm(val)):借助散点图自带的颜色映射和归一化逻辑,精准计算出对应intensity值的颜色
  • 遍历图例句柄逐个设置颜色,确保每个尺寸标记的颜色与数据集中对应intensity的配色完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 12:54:59