紧密布局抛出错误:ValueError:max()arg是一个空序列

Posted

技术标签:

【中文标题】紧密布局抛出错误:ValueError:max()arg是一个空序列【英文标题】:tight_layout throw error: ValueError: max() arg is an empty sequence 【发布时间】:2017-08-09 10:35:34 【问题描述】:

我正在尝试在 python 中使用 plt.ion() 启用更新数字:

import numpy as np
import numpy.matlib
import matplotlib.pyplot as plt

plt.ion()

plt.close('all')

tmax =30
W = np.random.rand(6,100)        

fig, ax = plt.subplots(2,3)     
plt.show()

for t in range (1, tmax):
    W = t * W        
    for ii in range(2):
        for jj in range(3):      
            output = W[3*ii+jj,:].reshape((10,10),order = 'F')
            ax[ii,jj].clear()
            ax[ii,jj].imshow(output, interpolation='nearest')                
    plt.tight_layout()
    plt.draw()
    plt.pause(0.1)


plt.waitforbuttonpress()

运行此命令将在控制台中显示空白数字并抛出错误:

Traceback(最近一次调用最后一次):

文件“”,第 1 行,在 runfile('/Users/Alessi/Documents/Spyder/3240ass/comp.py', wdir='/Users/Alessi/Documents/Spyder/3240ass')

文件 “/Users/Alessi/anaconda/lib/python3.5/site-packages/spyder/utils/site/sitecustomize.py”, 第 866 行,在运行文件中 execfile(文件名,命名空间)

文件 “/Users/Alessi/anaconda/lib/python3.5/site-packages/spyder/utils/site/sitecustomize.py”, 第 102 行,在 execfile 中 exec(编译(f.read(),文件名,'exec'),命名空间)

文件“/Users/Alessi/Documents/Spyder/3240ass/comp.py”,第 27 行,在 plt.tight_layout()

文件 “/Users/Alessi/anaconda/lib/python3.5/site-packages/matplotlib/pyplot.py”, 第 1387 行,在紧密布局中 fig.tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)

文件 “/Users/Alessi/anaconda/lib/python3.5/site-packages/matplotlib/figure.py”, 第 1752 行,在紧密布局中 rect=rect)

文件 “/Users/Alessi/anaconda/lib/python3.5/site-packages/matplotlib/tight_layout.py”, 第 322 行,在 get_tight_layout_figure 中 max_nrows = max(nrows_list)

ValueError: max() arg 是一个空序列

ps.使用 anaconda spyder

【问题讨论】:

【参考方案1】:

您不能在控制台中使用交互式更多 (ion)。不幸的是,问题不是很清楚你想要什么。但是让我们假设您想显示一个带有动画情节的窗口。一个简单的方法是在 IPython 控制台之外运行脚本。在 spyder 中,您将转到运行/配置(或按 F6)并选择“在新的专用 Python 控制台中执行”。

现在脚本本身的问题是你首先调用plt.show(),它显示了空的子图。这必须被删除。

会显示动画的版本是

import numpy as np
import matplotlib.pyplot as plt

plt.close('all')
plt.ion()

tmax =30

fig, ax = plt.subplots(2,3)     

for t in range (1, tmax):
    W = np.random.rand(6,100)      
    for ii in range(2):
        for jj in range(3):      
            output = W[3*ii+jj,:].reshape((10,10),order = 'F')
            ax[ii,jj].clear()
            ax[ii,jj].imshow(output, interpolation='nearest')
    if t == 1:                
        plt.tight_layout()
    plt.draw()
    plt.pause(0.1)


plt.waitforbuttonpress()

【讨论】:

对我来说重要的部分是:“现在脚本本身的问题是你首先调用 plt.show(),它显示了空的子图。这必须被删除。”

以上是关于紧密布局抛出错误:ValueError:max()arg是一个空序列的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Numpy 会抛出这个错误 ValueError: operands could not be broadcast together with shapes (3,0) (128,)

TFIDF Vectorizer 抛出 ValueError:空词汇

朴素贝叶斯高斯抛出 ValueError:无法将字符串转换为浮点数:'M'

Matplotlib 错误:“图包括与紧密布局不兼容的轴”

AES 解密抛出 ValueError:输入字符串的长度必须是 16 的倍数

Makemigrations ValueError:解包的值太多