Matplotlib XLabel绘图错误(IndexError:列表索引超出范围)

时间:2018-10-28 13:50:04

标签: python matplotlib

我正在使用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开始,从而使标签失真。最后一个情节也没有名称。

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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)