为了账号安全,请及时绑定邮箱和手机立即绑定

绘制子图时如何修复“numpy.ndarray”对象没有属性“get_figure”

绘制子图时如何修复“numpy.ndarray”对象没有属性“get_figure”

繁星点点滴滴 2023-10-11 15:39:14
我编写了以下代码来在不同的子图中绘制 6 个饼图,但出现错误。如果我使用它仅绘制 2 个图表,则该代码可以正常工作,但如果超出此范围,则会产生错误。我的数据集中有 6 个分类变量,其名称存储在 list 中cat_cols。图表是根据训练数据绘制的train。代码fig, axes = plt.subplots(2, 3, figsize=(24, 10))for i, c in enumerate(cat_cols):    train[c].value_counts()[::-1].plot(kind = 'pie', ax=axes[i], title=c, autopct='%.0f', fontsize=18)  axes[i].set_ylabel('')    plt.tight_layout()错误AttributeError: 'numpy.ndarray' object has no attribute 'get_figure'我们该如何纠正这个问题?
查看完整描述

1 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

  • 问题是plt.subplots(2, 3, figsize=(24, 10))创建两组 3 个子图,而不是一组 6 个子图。

array([[<AxesSubplot:xlabel='radians'>, <AxesSubplot:xlabel='radians'>, <AxesSubplot:xlabel='radians'>],
       [<AxesSubplot:xlabel='radians'>, <AxesSubplot:xlabel='radians'>, <AxesSubplot:xlabel='radians'>]], dtype=object)
  • axes使用解压 中的所有子图数组axes.ravel()

    • numpy.ravel,它返回一个展平的数组。

    • 列表理解也可以工作,axe = [sub for x in axes for sub in x]

    • 实际上,可以类似地使用axes.ravel()axes.flat、 和。axes.flatten()请参阅numpy 中的 flatten 和 ravel 函数有什么区别?& numpy 之间的 flat 和 ravel() 之间的区别。

  • 将每个图分配给 中的子图之一axe

import pandas as pd

import numpy as np


# sinusoidal sample data

sample_length = range(1, 6+1)

rads = np.arange(0, 2*np.pi, 0.01)

data = np.array([np.sin(t*rads) for t in sample_length])

df = pd.DataFrame(data.T, index=pd.Series(rads.tolist(), name='radians'), columns=[f'freq: {i}x' for i in sample_length])


# crate the figure and axes

fig, axes = plt.subplots(2, 3, figsize=(24, 10))


# unpack all the axes subplots

axe = axes.ravel()


# assign the plot to each subplot in axe

for i, c in enumerate(df.columns):

    df[c].plot(ax=axe[i])


查看完整回答
反对 回复 2023-10-11
  • 1 回答
  • 0 关注
  • 79 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信