散点图无归一化调整最大值及数值显示状态咨询
散点图数值显示说明
你的代码里:
- X轴(r12_load_MW)和Y轴(dda201FrequencyHz)都是原始数值,完全对应数据框里的原始值,没有做归一化处理。
- 控制散点颜色的
dda201Amplitude会按vmin=0和vmax=1的规则映射:- 0到1之间的数值按比例对应
rainbow色阶的中间颜色 - ≤0的数值统一用色阶最左端的颜色(蓝色)
- 所有>1的数值会被截断为1,统一用色阶最右端的颜色(红色)
- 0到1之间的数值按比例对应
- 右侧的颜色条(colorbar)只显示0到1的区间,不会体现原始数据中>1的数值的实际大小
另外你原本需求是“把大于阈值1的数值设为红色”,当前代码已经实现了这个效果,但如果原始数据里有远大于1的振幅值,这些点的颜色无法区分差异,全是同一种红色。如果想要颜色条能提示有超出范围的值,同时保持超阈值点为红色,可以修改代码如下:
# 复制振幅数据用于颜色映射 color_vals = set1["dda201Amplitude"].copy() # 把大于1的数值标记为1.1(只要大于vmax即可) color_vals[color_vals > 1] = 1.1 points = plt.scatter( set1["r12_load_MW"], set1["dda201FrequencyHz"], c=color_vals, s=20, cmap="rainbow", alpha=1, vmin=0, vmax=1 ) # 设置颜色映射范围,超出vmax的部分用红色 points.set_clim(vmin=0, vmax=1) points.cmap.set_over('red') # 后续绘图代码不变 plt.rcParams["figure.figsize"] = [20.5, 10.5] plt.title("Sensor: run2_dda2_201") plt.xlim(-50, 420) plt.ylim(0, 420) plt.xlabel("r12_load_MW") plt.ylabel("dda201FrequencyHz") # 颜色条添加超出标记 cbar = plt.colorbar(points, extend='max') cbar.set_label("dda201Amplitude") plt.rcParams.update({"font.size": 20})
内容的提问来源于stack exchange,提问作者Paulina
相关产品推荐
相关产品推荐

