条形图打印问题:typeerror:“AxeSubPlot”对象不可编辑

9wbgstp7  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(356)

下面显示的是条形图的分类数据详细信息,它来自特定的 DataFrame 列,即。 coast ```
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

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

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')
但是,条形图显示时,条形图上没有如下所示的值。

IN: code(data['coast'])
OUT:

![](https://i.stack.imgur.com/KhRbD.png)
但出现以下错误消息

TypeError: 'AxesSubplot' object is not iterable

如何解决上述错误以获得下面的条形图。
![](https://i.stack.imgur.com/Oz00f.png)
lokaqttq

lokaqttq1#

正如@henry ecker所评论的,您应该迭代ax.patches。pandas plot函数返回的是轴,而不是面片/矩形。

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)。

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)

相关问题