Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib xlabel打印错误(索引器错误:列表索引超出范围)_Python_Matplotlib - Fatal编程技术网

Python Matplotlib xlabel打印错误(索引器错误:列表索引超出范围)

Python Matplotlib xlabel打印错误(索引器错误:列表索引超出范围),python,matplotlib,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

我正在使用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
---------------------------------------------------------------------------
索引器回溯(最后一次最近调用)
在()
13 plt.yticks([])
14 plt.imshow(img,cmap=“gist_earth”)
--->15 plt.xlabel((名称[i]),fontsize=10)
16
17
索引器:列表索引超出范围
]

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

关于如何改进标签有什么想法吗?

子批次(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)

您应该稍微重构一下代码:

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)
对于i,枚举中的名称(名称):
img=f2Array[:,:,i]
plt.子地块(4,4,i+1)
plt.xticks([])
plt.yticks([])
plt.imshow(img,cmap=“gist_earth”)

plt.xlabel((name),fontsize=10)
您自己开始从1开始计数,循环中有
i=i+1
。从0开始也没有帮助@ForceBru,plt.subplot要求数字在0到16之间,因为有16个绘图。如果您确定列表中有16个元素,从循环中删除
i=i+1
后,不应该获取索引器。删除
i=i+1
循环会在
plt.subplot(4,4,i)
上返回错误。所有这些麻烦:为什么不能只使用
plt.xlabel((名称[i-1]),fontsize=10)