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

使用matplotlib绘制极坐标散点图时不更改图例标签调整标记大小

解决方法

你可以通过两种方案实现「放大散点尺寸+保持图例标签为原始t值」的需求:

方案1:提前放大尺寸+图例标签自动还原

核心逻辑是给scatter的s参数传入放大后的数值,再通过legend_elements的func参数把图例标签还原为原始值,无需额外手动调整:

fig = plt.figure(figsize=(5,5))
plt.style.use('default')
ax = fig.add_subplot(projection='polar')
size_scale = 3 # 可根据需求自定义放大倍数
# 传入放大后的尺寸作为散点大小
c = ax.scatter(r, s, c=c, s=t*size_scale, cmap='copper')
ax.set_theta_zero_location('N')
ax.set_theta_direction(-1)
# 用func参数将放大后的尺寸还原为原始t值作为图例标签
plt.legend(*c.legend_elements('sizes', num=3, func=lambda x: x/size_scale), loc=(1, 0.8))
plt.show()

方案2:生成图例后手动调整标记大小

如果你不想修改scatter的s参数传入值,可以在生成图例后单独放大图例中的标记尺寸:

fig = plt.figure(figsize=(5,5))
plt.style.use('default')
ax = fig.add_subplot(projection='polar')
c = ax.scatter(r, s, c=c, s=t, cmap='copper')
ax.set_theta_zero_location('N')
ax.set_theta_direction(-1)
# 先获取图例对象
leg = plt.legend(*c.legend_elements('sizes', num=3), loc=(1, 0.8))
size_scale = 3
# 遍历所有图例标记,放大尺寸
for handle in leg.legend_handles:
    handle.set_sizes([handle.get_sizes()[0] * size_scale])
plt.show()

注:部分旧版本matplotlib中需将legend_handles替换为legendHandles

两种方案都不会修改图例展示的原始数值,仅放大实际显示的散点和图例标记大小。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:24:05