使用Matplotlib中的轴绘制带有子点的图形时出现错误

时间:2019-02-05 17:51:39

标签: python python-3.x matplotlib

我尝试使用下面的代码绘制子图,但是我得到了'AttributeError: 'numpy.ndarray' object has no attribute 'boxplot'

但是更改plt.subplots(1,2)会绘制带有indexerror的箱形图。

import matplotlib.pyplot as plt
import seaborn as sns

fig = plt.Figure(figsize=(10,5))

x = [i for i in range(100)]


fig , axes = plt.subplots(2,2)

for i in range(4):
    sns.boxplot(x, ax=axes[i])

plt.show();

我希望可以绘制四个子图,但是抛出AttributeError

1 个答案:

答案 0 :(得分:0)

情节中的问题:

  • 您正在定义该图两次,不需要使用。我将它们合并为一个。
  • 您使用range(4)并使用axes[i]进行了4次循环访问子图。由于以下原因,这是错误的:您的轴是2维的,因此需要2个索引才能访问它。每个维度的长度为2,因为您有2行和2列,因此沿每个轴只能使用的索引是0和1。对于前。 axes[0,1]axes[1,0]
  • 正如@DavidG指出的那样,您不需要列表理解。您可以直接使用range(100)

解决方案是扩展/展平2D轴对象,然后直接在其上进行迭代,这将为您提供单独的子图,一次生成一个。子图的顺序将是逐行的。


完整的工作代码

import matplotlib.pyplot as plt
import seaborn as sns

x = range(100)

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

for ax_ in axes.flatten():
    sns.boxplot(x, ax=ax_)

plt.show()

enter image description here