Python散点图:如何实现同时展示颜色与尺寸编码的图例?
解决Matplotlib散点图图例同时展示颜色与尺寸编码的问题
要让图例同时体现尺寸和颜色的编码信息,你可以手动修改legend_elements生成的图例标记颜色,使其匹配对应intensity值的配色。具体实现如下:
- 先通过
legend_elements(prop='sizes')获取尺寸对应的图例句柄和标签 - 从散点图的颜色映射(cmap)和归一化(norm)规则中,计算每个intensity值对应的颜色
- 遍历图例句柄,为每个标记设置对应颜色
修改后的完整代码:
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
相关产品推荐
相关产品推荐

