无法强制转换数组数据。。。matplotlib和python
我正在尝试用python中的matplotlib制作一个3d折线图。数据集取自具有不同传感器的测量站。现在我的代码与我想要的差不多,但每次我尝试运行它时,都会显示出以下问题: TypeError:无法根据规则“safe”将数组数据从数据类型“float64”强制转换为数据类型“S32” 到目前为止,我的代码是:无法强制转换数组数据。。。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 = {
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个字符串。问题在于你的投入。