Pandas迭代传递列名至plot()的s参数报错求助
解决散点图s参数赋值的AttributeError问题
嘿,我一眼就看出问题出在哪了——你在循环里访问列的方式不对,直接导致了AttributeError!
错误原因
在你的循环中,i是动态的列名变量,但你用了continuous_data.i这种点语法来访问列。Python会把这里的i当成DataFrame的固定属性名,而不是循环变量i对应的列名,自然找不到这个不存在的属性,所以抛出错误。
修正后的代码
把列访问改成方括号索引的方式continuous_data[i]就能解决核心问题,我还帮你调整了一些细节,让代码逻辑更顺畅:
import matplotlib.pyplot as plt for i in continuous_data.columns : plt.figure(figsize=(12,10)) continuous_data.plot( x="Lattitude", y="Longtitude", kind="scatter", alpha=0.4, c="Price", colormap="gist_rainbow", s=continuous_data[i], # 这里改成方括号索引,匹配循环变量i对应的列 colorbar=True ) # 给大小维度手动加图例(可选,默认不会自动生成大小图例) from matplotlib.lines import Line2D size_samples = [Line2D([0], [0], marker='o', color='w', markerfacecolor='gray', markersize=sz) for sz in [10, 30, 50]] plt.legend(size_samples, ["Small", "Medium", "Large"], title=f"Size: {i}") plt.title(f"Scatter Plot with Size from Column: {i}") plt.show()
额外提示
- 如果列中的数值太大,散点标记会变得异常夸张,可以给
s参数加个缩放因子,比如s=continuous_data[i]/10,根据你的数据范围调整比例就行。 - 如果你不需要大小图例,删掉手动创建图例的代码,保留
plt.legend()也可以,但默认情况下scatter的大小不会自动生成图例,这点要注意。
内容的提问来源于stack exchange,提问作者Shiny
相关产品推荐
相关产品推荐

