【问题标题】:Matplotlib xlabel plotting error (IndexError: list index out of range)Matplotlib xlabel 绘图错误(IndexError:列表索引超出范围)
【发布时间】:2019-04-01 14:25:15
【问题描述】:

我正在使用 matplotlib 绘制几个 16 个图像,并使用从中提取这些图像的列名称来标记它们的名称。我遇到了一个问题,即地块的索引和它们的标签不匹配。

这是我目前的工作流程。

names = [(i) for i in (columns)]
names

列名列表为:

['value__longest_strike_above_mean',
 'value__longest_strike_below_mean',
 'value__maximum',
 'value__mean',
 'value__mean_abs_change',
 'value__mean_change',
 'value__median',
 'value__minimum',
 'value__number_cwt_peaks__n_12',
 'value__number_cwt_peaks__n_6',
 'value__quantile__q_0.05',
 'value__quantile__q_0.15',
 'value__quantile__q_0.85',
 'value__quantile__q_0.95',
 'value__skewness',
 'value__sum_values'] 

有 16 个名字将分配给下面的地块。

for i in range(0,16):
    img = f2Array[:,:,i]  
    i = i+1
    plt.subplot(4,4,i)
    plt.xticks([])
    plt.yticks([])
    plt.imshow(img, cmap="gist_earth")
    plt.xlabel((names[i]), fontsize=10)

以这种方式绘制给了我以下错误

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-284-299c4a617b63> in <module>()
     13     plt.yticks([])
     14     plt.imshow(img, cmap="gist_earth")
---> 15     plt.xlabel((names[i]), fontsize=10)
     16 
     17 

IndexError: list index out of range

]

名称的索引从 1 而不是 0 开始,这会扭曲标签。最后一个情节也没有名字。

关于如何改进标签的任何想法?

【问题讨论】:

  • 你自己从 1 开始计数,i = i+1 在循环内。
  • 从 0 开始也无济于事 @ForceBru,因为有 16 个地块,所以 plt.subplot 要求数字范围在 0 到 16 之间。
  • 如果您确定列表中有 16 个元素,则在从循环中删除 i = i+1 后您应该不会收到 IndexError。
  • 删除i= i+1 循环会在plt.subplot(4,4,i) 上返回错误。
  • 大惊小怪:你为什么不能只使用plt.xlabel((names[i-1]), fontsize=10)

标签: python matplotlib


【解决方案1】:

subplot(nrows, ncols, index, **kwargs) 的索引从 1 开始。所以只需删除 i=i+1 并使用 plt.subplot(4,4,i+1)。试试这个:

for i in range(0,16):
    img = f2Array[:,:,i]  
    plt.subplot(4,4,i+1)
    plt.xticks([])
    plt.yticks([])
    plt.imshow(img, cmap="gist_earth")
    plt.xlabel((names[i]), fontsize=10)

【讨论】:

    【解决方案2】:

    你应该重构你的代码:

    for i, name in enumerate(names):
        img = f2Array[:,:,i]  
        plt.subplot(4,4,i + 1)
        plt.xticks([])
        plt.yticks([])
        plt.imshow(img, cmap="gist_earth")
        plt.xlabel((name), fontsize=10)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-02
      • 2018-04-22
      • 2020-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-06
      相关资源
      最近更新 更多