AttributeError:“列表”对象没有属性“barh”

Posted

技术标签:

【中文标题】AttributeError:“列表”对象没有属性“barh”【英文标题】:AttributeError: 'list' object has no attribute 'barh' 【发布时间】:2020-12-18 15:15:14 【问题描述】:

我有一个使用 PyQt5 的 GUI 界面。我创建了一个类,负责将使用value_counts() 的分类列绘制到条形图中。它将接收名为tb1 的数据框和名为ctb1 的列名。

这是我的一段代码:

class Ui_Dialog:
   def setupUi(self, Dialog):
       Dialog.setObjectName("Dialog")
       Dialog.resize(900, 500)

   def retranslateUi(self, Dialog):
       _translate = QtCore.QCoreApplication.translate
       Dialog.setWindowTitle(_translate("Dialog", "output window"))

class Canvas(FigureCanvas):
   def __init__(self,parent=None, width=10, height=9):
       fig = Figure(figsize=(width, height))
       self.axes = fig.add_subplot(111)
       FigureCanvas.__init__(self, fig)
       self.setParent(parent)

     

   def plot(self,df1,ctb1,v2):
       CountStatus = pd.value_counts(df1[ctb1].values, sort=True)
       CountStatus.axes.barh()
       self.draw()
       

class Dialog(QtWidgets.QDialog, Ui_Dialog):

   def __init__(self,tb1,ctb1,parent=None):
       super().__init__(parent)
       self.setupUi(self)
       self.canvas = Canvas(self,width=8, height=5)
       self.canvas.plot(tb1,ctb1,v2)
       self.canvas.move(0, 0)


if __name__ == "__main__":
# some code here

我试图把它放在我的子情节中,使用这个axes CountStatus.axes.barh(),但它一直在给我

AttributeError: 'list' 对象没有属性 'barh'

我不明白问题出在哪里,或者有其他方法可以将其绘制成条形图吗?

【问题讨论】:

错误很明显:CountStatus.axes 是一个列表。 pandas.pydata.org/docs/reference/api/pandas.DataFrame.axes.html 【参考方案1】:

您在 self.axes(确实是 matplotlib Axes)与 pd.value_counts.axes(只是 value_counts 系列的标签列表)之间感到困惑。

同名但完全不同且不相关的对象。

改用self.axes.barh(CountStatus...)之类的东西 或CountSatus.plot.barh(ax=self.axes)

【讨论】:

感谢您的回复我尝试使用`self.axes.barh(CountStatus,width=0.5)` 它给了我`unhashable type: 'numpy.ndarray' 我应该将计数状态转换为两个数组,一个用于 x,另一个用于标签? 这是一种选择。另一种选择是 CountSatus.plot.barh(ax=self.axes) @LiorCohen 你应该把它包含在你的答案中。【参考方案2】:

试试这种和平的代码:

 def plot(self,df1,ctb1,v2):          
     CountStatus = pd.value_counts(df1[ctb1].values, sort=True)
     CountStatus.plot.barh(ax=self.axes)
     self.draw()

【讨论】:

以上是关于AttributeError:“列表”对象没有属性“barh”的主要内容,如果未能解决你的问题,请参考以下文章

AttributeError:“列表”对象在转换为数组时没有属性“形状”

AttributeError:“列表”对象没有属性“排序值”

Keras AttributeError:“列表”对象没有属性“ndim”

AttributeError: 'property' 对象没有属性 'copy' - 尝试在 Django Rest 中获取对象列表时

AttributeError:“列表”对象没有属性“barh”

AttributeError 列表对象没有属性添加