如何保持比例放大matplotlib中基于列值映射的散点尺寸
散点等比例放大调整方法
你当前散点整体过小的原因是直接将原始hv_mean_f0_fr_列的数值作为散点尺寸传入plt.scatter:matplotlib散点的s参数单位为磅平方,若原始频率值本身数值区间偏小(如集中在0.5~5Hz范围),渲染出的散点自然难以辨识。
由于散点尺寸和传入的s值是线性映射关系,只要给所有原始尺寸值乘一个固定的正系数,就能完全保留不同数据点之间的大小比例关系,同时实现整体放大。
快速修改方案
直接替换原有散点绘制部分的代码即可:
###scatter plots of results s_raw = hvsrperfil_04.hv_mean_f0_fr_ # 缩放系数可自行调整:数值越大散点整体越大,点间比例保持不变 scale_coeff = 30 s_scaled = s_raw * scale_coeff # 建议添加alpha透明度、白色细描边,避免散点遮挡底图、或同色点重叠难以分辨 plt.scatter( hvsrperfil_04.Longitude, hvsrperfil_04.Latitude, c=s_raw, # 颜色映射仍用原始值,保证色条对应真实频率 s=s_scaled, cmap='inferno', label='HVSR Mean F0 Frequencies', alpha=0.8, edgecolors='white', linewidths=0.5 ) plt.colorbar(label='HVSR平均F0频率')
调整技巧
- 缩放系数没有固定标准,可从20开始测试:如果散点还是偏小就增大系数(如调到50、80),如果散点过大遮挡底图要素就减小系数,直到视觉辨识度符合要求即可。
- 如果需要精准控制散点的尺寸上下限(比如保证频率最低的点也足够清晰、频率最高的点不会过大),可以先对原始值做归一化,再映射到自定义的尺寸区间,点间的大小比例关系依旧不会被破坏,参考代码如下:
import numpy as np s_raw = hvsrperfil_04.hv_mean_f0_fr_ # 自定义散点的最小、最大尺寸 min_size = 15 max_size = 220 # 归一化后映射到目标尺寸区间 s_norm = (s_raw - s_raw.min()) / (s_raw.max() - s_raw.min()) s_scaled = min_size + s_norm * (max_size - min_size) # 后续scatter调用和上面一致,s参数传入s_scaled即可
注意:不要修改
c参数传入的值,始终传入原始频率数据,才能保证颜色条的刻度对应真实的频率测量值,不会产生数据误导。
内容的提问来源于stack exchange,提问作者Daniele Ingredy
相关产品推荐
相关产品推荐

