Matplotlib Error TypeError: Невозможно привести данные массива из dtype ('float64') к dtype (' - PullRequest
0 голосов
/ 28 февраля 2019

Извините, я немного разбираюсь в python, но я пытаюсь вывести набор данных csv-файла ( csvfile ) в 3D-графике.мой код пока выглядит следующим образом:

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()

Но я продолжаю выдавать ошибку в названии.Любая помощь приветствуется

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

просто для удовольствия, используя 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'})
0 голосов
/ 28 февраля 2019

Ошибка в том, что вы пытаетесь построить три списка объектов типа 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 строк ваших данных и нанес их с этими изменениями, чтобы получить

3D Scatterplot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...