无法强制转换数组数据。。。matplotlib和python

无法强制转换数组数据。。。matplotlib和python,python,arrays,matplotlib,charts,Python,Arrays,Matplotlib,Charts,我正在尝试用python中的matplotlib制作一个3d折线图。数据集取自具有不同传感器的测量站。现在我的代码与我想要的差不多,但每次我尝试运行它时,都会显示出以下问题: TypeError:无法根据规则“safe”将数组数据从数据类型“float64”强制转换为数据类型“S32” 到目前为止,我的代码是: import csv from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt depth = {

我正在尝试用python中的matplotlib制作一个3d折线图。数据集取自具有不同传感器的测量站。现在我的代码与我想要的差不多,但每次我尝试运行它时,都会显示出以下问题:

TypeError:无法根据规则“safe”将数组数据从数据类型“float64”强制转换为数据类型“S32”

到目前为止,我的代码是:

import csv
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt

depth = {
    1 : 11, 2 : 35, 3 : -1, 4 : 11, #position of graphs in cm
}
class SetXYZ:
    def __init__(self, datalist, NameNum): #datalist: list with data, NameNum: number of variable
        self.NameNum = NameNum
        self.datalist = datalist
        self.Name = datalist[0][NameNum]
        self.length = datalist

    def X(self): #Creates list with X Variables
        Xlist = []
        for element in self.datalist:
            Xlist.append(element[0])
        Xlist.pop(0)
        return Xlist

    def Y(self): #Creates list with Y Variables
        Ylist = []
        for element in self.datalist:
            Ylist.append(element[self.NameNum])
        Ylist.pop(0)
        return Ylist

    def Z(self): #list with Z variables
        Zlist = []
        for element in datalist: #Z is the same for every point on one graph
            Zlist.append(depth[self.NameNum-1])
        Zlist.pop(0)
        return Zlist


def csv_to_list(filename): #returns the file as list
    with open(filename, 'rb') as data:
        data = csv.reader(data, delimiter=';')
        datalist = list(data)
        return datalist


filename = "     " #Filename

datalist = csv_to_list(filename)

Graph1 = SetXYZ(datalist, 1)  #creates the graphs
Graph2 = SetXYZ(datalist, 2)

#plots a graph, more or less to test
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

ax.scatter(Graph1.X(), Graph1.Y(), Graph1.Z())

plt.show()
文件如下所示:

Traceback (most recent call last):

  File "C:\Anaconda\lib\site-packages\matplotlib\backends\backend_qt5.py", line 338, in resizeEvent
    self.draw()

  File "C:\Anaconda\lib\site-packages\matplotlib\backends\backend_qt5agg.py", line 148, in draw
    FigureCanvasAgg.draw(self)

  File "C:\Anaconda\lib\site-packages\matplotlib\backends\backend_agg.py", line 461, in draw
    self.figure.draw(self.renderer)

  File "C:\Anaconda\lib\site-packages\matplotlib\artist.py", line 59, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)

  File "C:\Anaconda\lib\site-packages\matplotlib\figure.py", line 1079, in draw
    func(*args)

  File "C:\Anaconda\lib\site-packages\mpl_toolkits\mplot3d\axes3d.py", line 254, in draw
    for col in self.collections]

  File "C:\Anaconda\lib\site-packages\mpl_toolkits\mplot3d\art3d.py", line 413, in do_3d_projection
    vxs, vys, vzs, vis = proj3d.proj_transform_clip(xs, ys, zs, renderer.M)

  File "C:\Anaconda\lib\site-packages\mpl_toolkits\mplot3d\proj3d.py", line 208, in proj_transform_clip

    return proj_transform_vec_clip(vec, M)

  File "C:\Anaconda\lib\site-packages\mpl_toolkits\mplot3d\proj3d.py", line 165, in proj_transform_vec_clip

    vecw = np.dot(M, vec)

TypeError: Cannot cast array data from dtype('float64') to dtype('S32') according to the rule 'safe'
时间;传感器1;传感器2;传感器3;传感器4

41940.67916667;16;19.96;4.1;11.52

41940.67986;15.9;20.51;4.07;11.4

41940.67986;15.9;20.53;4.07;11.41

完整错误如下所示:

Traceback (most recent call last):

  File "C:\Anaconda\lib\site-packages\matplotlib\backends\backend_qt5.py", line 338, in resizeEvent
    self.draw()

  File "C:\Anaconda\lib\site-packages\matplotlib\backends\backend_qt5agg.py", line 148, in draw
    FigureCanvasAgg.draw(self)

  File "C:\Anaconda\lib\site-packages\matplotlib\backends\backend_agg.py", line 461, in draw
    self.figure.draw(self.renderer)

  File "C:\Anaconda\lib\site-packages\matplotlib\artist.py", line 59, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)

  File "C:\Anaconda\lib\site-packages\matplotlib\figure.py", line 1079, in draw
    func(*args)

  File "C:\Anaconda\lib\site-packages\mpl_toolkits\mplot3d\axes3d.py", line 254, in draw
    for col in self.collections]

  File "C:\Anaconda\lib\site-packages\mpl_toolkits\mplot3d\art3d.py", line 413, in do_3d_projection
    vxs, vys, vzs, vis = proj3d.proj_transform_clip(xs, ys, zs, renderer.M)

  File "C:\Anaconda\lib\site-packages\mpl_toolkits\mplot3d\proj3d.py", line 208, in proj_transform_clip

    return proj_transform_vec_clip(vec, M)

  File "C:\Anaconda\lib\site-packages\mpl_toolkits\mplot3d\proj3d.py", line 165, in proj_transform_vec_clip

    vecw = np.dot(M, vec)

TypeError: Cannot cast array data from dtype('float64') to dtype('S32') according to the rule 'safe'
完成后,最多可以有30个传感器和数千次

有没有解决办法,或者我做错了什么


谢谢你的帮助

始终显示堆栈跟踪,即如果您发布的代码不是堆栈跟踪,则显示完整错误。此外,如果你能发布一个我在中编辑了完整错误的datalist的摘录,这会有所帮助。而datalist是由类似于我文章中示例的文件从文件名生成的。在类SetXYZ中Z的定义中,我必须将self.NameNum-1更改为self.NameNum作为深度的键值,然后使用上面的示例文件不会引发异常。如果注释掉脚本的绘图部分,代码是否有效?从堆栈跟踪中,我们无法判断代码中的哪一行触发了错误,但看起来可能在绘图部分。我忘记删除-1。没有绘图部分,它工作得很好。这可能是matplotlib中的错误吗?关键是不能将数组数据从dtype'float64'转换为dtype'S32'。这意味着可以将64位float转换为固定长度的32个字符串。问题在于你的投入。