You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

循环绘制直方图时遇'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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 17:40:47