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 中获取对象列表时