Python Matplotlib Error TypeError:无法根据规则将数组数据从数据类型(';float64';)转换为数据类型(';lt;U32';);安全';

Python Matplotlib Error TypeError:无法根据规则将数组数据从数据类型(';float64';)转换为数据类型(';lt;U32';);安全';,python,matplotlib,Python,Matplotlib,请原谅,我对python知之甚少,但我正在尝试在3d图形中输出csv file()数据集。我的代码如下: from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import csv fig = plt.figure() ax = fig.add_subplot(111, projection='3d') with open('new3.csv') as csvfile: readCSV = c

请原谅,我对python知之甚少,但我正在尝试在3d图形中输出csv file()数据集。我的代码如下:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import csv
   fig = plt.figure()
   ax = fig.add_subplot(111, projection='3d')

with open('new3.csv') as csvfile:
readCSV = csv.reader(csvfile, delimiter=',')
next(readCSV)
next(readCSV)
next(readCSV)
XS =[]
YS =[]
ZS =[]
for column in readCSV:
    xs = column[1]
    ys = column[2]
    zs = column[3]

    XS.append(xs)
    YS.append(ys)
    ZS.append(zs)
    ax.scatter(XS, YS, ZS, c='r', marker='o')
    ax.set_xlabel('X Label')
    ax.set_ylabel('Y Label')
    ax.set_zlabel('Z Label')

    plt.show()

但我一直在想标题中的错误。非常感谢您的帮助。错误是因为您试图绘制三个
str
type对象列表。它们必须是
float
或类似类型,并且不能隐式强制转换。通过进行以下修改,可以显式执行类型转换:

for column in readCSV:
        xs = float(column[1])
        ys = float(column[2])
        zs = float(column[3])
还要注意,
ax.scatter
应该在循环之外,如下所示

    for column in readCSV:
        xs = float(column[1])
        ys = float(column[2])
        zs = float(column[3])

        XS.append(xs)
        YS.append(ys)
        ZS.append(zs)

ax.scatter(XS, YS, ZS, c='r', marker='o')
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
否则,您将得到
.csv
中每一行的新散点图。我隔离了数据的前5行,并用这些修改绘制了它们,以给出


错误是因为您试图绘制三个
str
类型对象列表。它们必须是
float
或类似类型,并且不能隐式强制转换。通过进行以下修改,可以显式执行类型转换:

for column in readCSV:
        xs = float(column[1])
        ys = float(column[2])
        zs = float(column[3])
还要注意,
ax.scatter
应该在循环之外,如下所示

    for column in readCSV:
        xs = float(column[1])
        ys = float(column[2])
        zs = float(column[3])

        XS.append(xs)
        YS.append(ys)
        ZS.append(zs)

ax.scatter(XS, YS, ZS, c='r', marker='o')
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
否则,您将得到
.csv
中每一行的新散点图。我隔离了数据的前5行,并用这些修改绘制了它们,以给出


只是为了好玩,使用numpy默认情况下通过将字符串传递给matplotlib来绕过原始问题,同时稍微压缩代码

raw = """
id,gx,gy,gz,ax,ay,az
0,4.47,-33.23,-77,-106,94
1,-129.04,4.48,-33.22,-78,-94,117
2,-129.04,4.49,33.2,-70,-81,138
3,-129.02,4.49,-33.18,-70,-64,157
4,-129.02,4.5,-33.15,-64,-47,165
"""

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from io import StringIO

# read data
csvfile = StringIO(raw)
d = plt.np.loadtxt(csvfile, delimiter=',', skiprows=2, usecols=[1,2,3])
# instead of csvfile just use filename when using the real file
xyz = plt.np.split(d.T, indices_or_sections=len(d.T))

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(*xyz, c='r', marker='o')
ax.set(**{'%slabel'%s: s.upper() + ' Label' for s in 'xyz'})

只是为了好玩,使用numpy默认情况下通过将字符串传递给matplotlib来绕过原始问题,同时稍微压缩代码

raw = """
id,gx,gy,gz,ax,ay,az
0,4.47,-33.23,-77,-106,94
1,-129.04,4.48,-33.22,-78,-94,117
2,-129.04,4.49,33.2,-70,-81,138
3,-129.02,4.49,-33.18,-70,-64,157
4,-129.02,4.5,-33.15,-64,-47,165
"""

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from io import StringIO

# read data
csvfile = StringIO(raw)
d = plt.np.loadtxt(csvfile, delimiter=',', skiprows=2, usecols=[1,2,3])
# instead of csvfile just use filename when using the real file
xyz = plt.np.split(d.T, indices_or_sections=len(d.T))

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(*xyz, c='r', marker='o')
ax.set(**{'%slabel'%s: s.upper() + ' Label' for s in 'xyz'})

非常感谢,这帮助我输出了完整的文件。非常感谢,这帮助我输出了完整的文件。