循环绘制直方图时遇'numpy.ndarray'无'tick_params'属性错误求助
问题描述
我编写了一段代码,试图遍历DataFrame(newerdf)的指定列,为每一列绘制直方图并保存到桌面,但运行时报错:'numpy.ndarray' object has no attribute 'tick_params',希望得到解决帮助。
代码如下:
listedvariables = ['distance','age'] for i in range(0,len(listedvariables)): x = newerdf[[listedvariables[i]]].hist(figsize=(50,50)) x.tick_params(axis='x',labelsize=60) x.tick_params(axis='y',labelsize=60) x.set_xlabel(var,fontsize=70,labelpad=30,weight='bold') x.set_ylabel('Number of participants',fontsize=70,labelpad=30,weight='bold') x.set_title(var,fontsize=70,pad=30,weight='bold') dir_name = "/Users/macbook/Desktop/UCL PhD Work/" plt.rcParams["savefig.directory"] = os.chdir(os.path.dirname(dir_name)) plt.savefig(var+' '+'histogram') plt.show()
newerdf['age']的前10行数据:
0 21.0 1 24.0 2 47.0 3 32.0 5 29.0 6 29.0 7 22.0 8 23.0 9 32.0 10 22.0
问题原因与解决方法
核心错误原因
pandas.DataFrame.hist()返回的是numpy数组(内部包含matplotlib的Axes对象),不是单个Axes对象,直接对数组调用tick_params()等Axes方法必然报错。此外代码中还存在var变量未定义、路径处理冗余的问题。
修正后的代码
import matplotlib.pyplot as plt import os import pandas as pd listedvariables = ['distance','age'] save_dir = "/Users/macbook/Desktop/UCL PhD Work/" # 确保保存目录存在,不存在则创建 os.makedirs(save_dir, exist_ok=True) for var in listedvariables: # 绘制直方图并提取单个Axes对象 ax = newerdf[var].hist(figsize=(50,50))[0][0] # 设置坐标轴刻度大小 ax.tick_params(axis='x', labelsize=60) ax.tick_params(axis='y', labelsize=60) # 设置坐标轴标签与图表标题 ax.set_xlabel(var, fontsize=70, labelpad=30, weight='bold') ax.set_ylabel('Number of participants', fontsize=70, labelpad=30, weight='bold') ax.set_title(f'{var} histogram', fontsize=70, pad=30, weight='bold') # 拼接路径并保存图片 plt.savefig(os.path.join(save_dir, f'{var} histogram.png')) plt.close() # 关闭画布,避免内存占用和图表重叠
关键改动说明
- 直接遍历
listedvariables中的变量名,避免var未定义问题,代码更简洁。 - 通过
[0][0]从hist()返回的数组中提取单个Axes对象,确保后续方法调用有效。 - 用
os.path.join()拼接保存路径,保证跨平台兼容性;添加os.makedirs()确保保存目录存在。 - 用
plt.close()关闭画布,避免多次绘制后内存泄漏和图表重叠。
内容的提问来源于stack exchange,提问作者Caledonian26
相关产品推荐
相关产品推荐

