首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >条形图绘制问题: TypeError:'AxesSubplot‘对象不可迭代

条形图绘制问题: TypeError:'AxesSubplot‘对象不可迭代
EN

Stack Overflow用户
提问于 2021-07-11 01:55:38
回答 1查看 314关注 0票数 0

下面显示的是条形图的分类数据详细信息,该条形图来自特定的DataFrame列,即coast

代码语言:javascript
复制
import seaborn as sns
import matplotlib as mpl
import matplotlib.pyplot as plt


IN: data['coast'].dtypes
OUT: 
CategoricalDtype(categories=[0, 1], ordered=False)


IN: data['coast'].value_counts()  
OUT: 
0    21450
1      163
Name: coast, dtype: int64

下面所示的语法是用于获取条形图的已定义函数。

代码语言:javascript
复制
def code(c):
    plt.rc('figure', figsize=(10, 5))
        
    ax = c.value_counts().plot(kind='bar')
    
    for value in ax:
        height = value.get_height()
        plt.text(value.get_x() + value.get_width()/2., 
                 1.002*height,'%d' % int(height), ha='center', va='bottom')

但是,条形图显示时条形图上没有值,如下所示。

代码语言:javascript
复制
IN: code(data['coast'])
OUT:

但是会出现以下错误消息

代码语言:javascript
复制
---------------------------------------------------------------------------
TypeError: 'AxesSubplot' object is not iterable
---------------------------------------------------------------------------

我如何解决上面的错误以获得下面的条形图。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-11 06:32:36

正如@Henry Ecker评论的那样,你应该在ax.patches上迭代。pandas plot函数返回轴,而不是补丁/矩形。

代码语言:javascript
复制
df = pd.DataFrame({
    'coast': np.random.choice(['Cat1','Cat2'], size=20000, p=[0.9, 0.1])
})

def code(c):
    plt.rc('figure', figsize=(10, 5))
        
    ax = c.value_counts().plot(kind='bar')
    
    for value in ax.patches:
        height = value.get_height()
        plt.text(value.get_x() + value.get_width()/2., 
                 1.002*height,'%d' % int(height), ha='center', va='bottom')

code(df.coast)

或者,只需绘制曲线图,并获得您自己的值。条形图的X轴只是一个从0到条数的数组(在本例中为2)。

代码语言:javascript
复制
df = pd.DataFrame({
    'coast': np.random.choice(['Cat1','Cat2'], size=20000, p=[0.9, 0.1])
})

def code(c):
    plt.rc('figure', figsize=(10, 5))
    counts = c.value_counts()    
    ax = counts.plot(kind='bar')

    for i in range(len(counts)):
        ax.text(
            x = i,
            y = counts[i] + 600,
            s = str(counts[i]),
            ha = 'center', fontsize = 14
        )
    ax.set_ylim(0,25000)

code(df.coast)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68330318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档