Seaborn散点图将price映射为颜色和大小时int无sqrt属性报错问询
报错原因
这个报错确实是数据类型差异导致的:
matplotlib的scatter函数的s参数(控制点大小)在内部渲染逻辑中,需要对传入的大小数值执行平方根运算来统一缩放散点面积,而你传入的price是Python原生int/ numpy int类型,部分版本的numpy + matplotlib组合不支持直接对整数类执行该运算,就会抛出你遇到的属性错误和类型错误。
解决方法
1. 修复类型报错
将price转为浮点类型传入即可解决报错,同时可以给s参数加缩放系数,避免散点过大/重叠,修改后的绘图代码如下:
import matplotlib.pyplot as plt from matplotlib.ticker import MaxNLocator plt.scatter(df_Scatter.longitude, df_Scatter.latitude, c=df_Scatter.price, # 转为float解决类型报错,0.3为缩放系数,可根据显示效果自行调整 s = df_Scatter.price.astype(float) * 0.3)
2. 配置图例为整数格式
不需要修改原始price数据,直接通过色条配置强制图例显示整数即可:
# 添加价格色条 cbar = plt.colorbar() cbar.set_label('Price') # 禁用科学计数法和偏移量 cbar.formatter.set_useOffset(False) cbar.formatter.set_scientific(False) # 强制色条刻度为整数 cbar.locator = MaxNLocator(integer=True) cbar.update_ticks() # 补充坐标轴标签 plt.xlabel('Longitude') plt.ylabel('Latitude') plt.show()
如果需要同时显示散点大小对应的图例,手动生成自定义整数标签即可,无需修改原始数据类型。
内容的提问来源于stack exchange,提问作者DropKick
相关产品推荐
相关产品推荐

