首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ValueError:“顶点”必须是具有形状Nx2的2D列表或数组

ValueError:“顶点”必须是具有形状Nx2的2D列表或数组
EN

Stack Overflow用户
提问于 2018-07-05 03:32:25
回答 1查看 7.5K关注 0票数 5

我试图动画一个散图,但得到以下错误。我以前让它工作过,但现在它在重复时返回这个错误。

代码语言:javascript
复制
ValueError: 'vertices' must be a 2D list or array with shape Nx2

我会附上下面的动画代码。我之前就让它起作用了,所以我知道它有效。

代码语言:javascript
复制
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
import matplotlib.transforms as transforms

XA = np.random.randint(80, size=(1000, 15))
YA = np.random.randint(80, size=(1000, 15)) 

XB = np.random.randint(80, size=(1000, 15))
YB = np.random.randint(80, size=(1000, 15)) 

XC = np.random.randint(80, size=(1000, 1))
YC = np.random.randint(80, size=(1000, 1))

fig, ax = plt.subplots(figsize = (10,6))
ax.axis('equal')

'''' Scatter Plot  '''

scatter_A = ax.scatter(XA[0], YA[0], c=['blue'], alpha = 0.7, s = 20, edgecolor = 'black', zorder = 2)
scatter_B = ax.scatter(XB[0], YB[0], c=['white'], alpha = 0.7, s = 20, edgecolor = 'black', zorder = 2)

offset = lambda p: transforms.ScaledTranslation(p/82.,0, plt.gcf().dpi_scale_trans)
trans = plt.gca().transData
scatter_C = ax.scatter(XC[0], YC[0], c=['red'], marker = 'o', alpha = 0.7, s = 10, edgecolor = 'black', zorder = 2,transform=trans+offset(+2))

'''Animate Function '''

def animate(i) :
    scatter_A.set_offsets([[[[[[[[[[[[[[[XA[0+i][0], YA[0+i][0]], [XA[0+i][1], YA[0+i][1]], [XA[0+i][2], YA[0+i][2]], [XA[0+i][3], YA[0+i][3]], [XA[0+i][4], YA[0+i][4]],[XA[0+i][5], YA[0+i][5]], [XA[0+i][6], YA[0+i][6]], [XA[0+i][7], YA[0+i][7]], [XA[0+i][8], YA[0+i][8]], [XA[0+i][9], YA[0+i][9]], [XA[0+i][10], YA[0+i][10]], [XA[0+i][11], YA[0+i][11]], [XA[0+i][12], YA[0+i][12]], [XA[0+i][13], YA[0+i][13]], [XA[0+i][14], YA[0+i][14]]]]]]]]]]]]]]]])
    scatter_B.set_offsets([[[[[[[[[[[[[[[XB[0+i][0], YB[0+i][0]], [XB[0+i][1], YB[0+i][1]], [XB[0+i][2], YB[0+i][2]], [XB[0+i][3], YB[0+i][3]], [XB[0+i][4], YB[0+i][4]],[XB[0+i][5], YB[0+i][5]], [XB[0+i][6], YB[0+i][6]], [XB[0+i][7], YB[0+i][7]], [XB[0+i][8], YB[0+i][8]], [XB[0+i][9], YB[0+i][9]], [XB[0+i][10], YB[0+i][10]], [XB[0+i][11], YB[0+i][11]], [XB[0+i][12], YB[0+i][12]], [XB[0+i][13], YB[0+i][13]], [XB[0+i][14], YB[0+i][14]]]]]]]]]]]]]]]])
    scatter_C.set_offsets([[XC[0+i][0], YC[0+i][0]]])


ani = animation.FuncAnimation(fig, animate, np.arange(0,1000),
                              interval = 100, blit = False)


Writer = animation.writers['ffmpeg']
writer = Writer(fps = 10, bitrate = 8000)

ax.autoscale()

plt.draw()

我正在运行Spyder 3.1.2通过Anaconda 1.6.4Python 3.5Python 5.1.0

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-05 09:21:46

错误信息应该会给您提供所需的所有提示。删除set_offsets()调用中的多余括号可以达到以下目的:

代码语言:javascript
复制
def animate(i) :
    scatter_A.set_offsets([[XA[0+i][0], YA[0+i][0]], [XA[0+i][1], YA[0+i][1]], [XA[0+i][2], YA[0+i][2]], [XA[0+i][3], YA[0+i][3]], [XA[0+i][4], YA[0+i][4]],[XA[0+i][5], YA[0+i][5]], [XA[0+i][6], YA[0+i][6]], [XA[0+i][7], YA[0+i][7]], [XA[0+i][8], YA[0+i][8]], [XA[0+i][9], YA[0+i][9]], [XA[0+i][10], YA[0+i][10]], [XA[0+i][11], YA[0+i][11]], [XA[0+i][12], YA[0+i][12]], [XA[0+i][13], YA[0+i][13]], [XA[0+i][14], YA[0+i][14]]])
    scatter_B.set_offsets([[XB[0+i][0], YB[0+i][0]], [XB[0+i][1], YB[0+i][1]], [XB[0+i][2], YB[0+i][2]], [XB[0+i][3], YB[0+i][3]], [XB[0+i][4], YB[0+i][4]],[XB[0+i][5], YB[0+i][5]], [XB[0+i][6], YB[0+i][6]], [XB[0+i][7], YB[0+i][7]], [XB[0+i][8], YB[0+i][8]], [XB[0+i][9], YB[0+i][9]], [XB[0+i][10], YB[0+i][10]], [XB[0+i][11], YB[0+i][11]], [XB[0+i][12], YB[0+i][12]], [XB[0+i][13], YB[0+i][13]], [XB[0+i][14], YB[0+i][14]]])
    scatter_C.set_offsets([[XC[0+i][0], YC[0+i][0]]])

我很惊讶你的代码以前起作用了。请注意,我不是在运行完全相同的设置,而是在macosx 10.13.5上通过macports安装了Python 3.6

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51183022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档