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

时间:2018-07-05 03:32:25

标签: python macos pandas matplotlib backend

我正在尝试为散点图制作动画,但出现以下错误。我以前使用过它,但是现在重复返回此错误。

ValueError: 'vertices' must be a 2D list or array with shape Nx2

我将在下面附加动画代码。我在工作之前就知道了它的作用。

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.2Anaconda 1.6.4Python 3.5Python 5.1.0

1 个答案:

答案 0 :(得分:1)

该错误消息应为您提供所有需要的提示。删除set_offsets()通话中的多余括号可以达到目的:

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安装了Python 3.6的{​​{1}}。