使用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
相关产品推荐
相关产品推荐

