python matplotlib будет отображать только целые числа - PullRequest
0 голосов
/ 24 июля 2010

Я очень плохо знаком с Python.два дня.пытаясь получить сюжет, работающий с matplotlib.Я получаю эту ошибку:

cannot perform reduce with flexible type

строка с ошибкой:

ax.scatter(x,y,z,marker='o')

Переменные:

ax определяется как: ax = Axes3D(fig)

fig определяется как: fig = plt.figure()

x, y, z - списки

Любые эксперты по Python говорят мне, почему?Я получил график на работу, но значения целые.Предпочтительны десятичные значения.

Я читал, что списки в Python не очень хороши с числами ... кто-то может уточнить?Я получил его для работы со списками и ndarrays, но все значения должны быть целыми числами.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 24 июля 2010

Сравните ваш код с этим базовым кодом рассеяния .Обратите внимание, что xs, ys, zs являются ndarrays из поплавков.Этот код работает для вас?Возможно, вы можете постепенно преобразовать этот код в свой собственный, чтобы получить работающий код (или узнать, где у вас проблемы).

Если это не поможет, возможно, опубликуйте достаточно кода, чтобы мы могли воспроизвести проблему.По крайней мере, опубликовать вывод

print(repr(x))
print(repr(y))
print(repr(z))
1 голос
/ 24 июля 2010

Спасибо за ответы.

Я работал с поплавками, но, может быть, вы все можете сказать мне, почему.Я только что создал учетную запись здесь и не могу редактировать свой гостевой вопрос ...

Я получаю свои данные из базы данных sqlite.Я могу округлить значения в sql или привести к float, и это работает.Я предполагаю, что данные были числовым объектом, хотя они были числовыми.Это правильно?

Вот выдержка из кода, который не работает.Я заставил его работать, приведя значения к числу с плавающей точкой.


import sqlite3
import re
import numpy as np
from numpy import *
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

conn = sqlite3.connect('./RES/resDB.dbl')

fig = plt.figure()
ax = Axes3D(fig)

sam = array([])
x = array([])
y = array([])
z = array([])

for sv in conn.execute('select sam,easting,northing,altitude from trx_all'):
    sam = np.append(sam, [sv[0]]) #this works: sam = np.append(sam, [float(sv[0])])
    x = np.append(x, [sv[1]]) #this works: x = np.append(x, [float(sv[1])])
    y = np.append(y, [sv[2]]) #this works: y = np.append(y, [float(sv[2])])
    z = np.append(z, [sv[3]]) #this works: z = np.append(z, [float(sv[3])])
if sam.__len__() > 0:
    print(repr(x))
    print(repr(y))
    print(repr(z))
    ax.scatter(x, y, z, marker='o')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title("3D plot")
plt.show()

unutbu запросил вывод print (repr (x)):


x: array([u'227004.744896075', u'227029.694213685', u'227051.351657645', ...,
       u'226416.484484696', u'226436.436477995', u'226401.253669657'],
      dtype='U16')
y: array([u'3648736.75423911', u'3648737.3357031', u'3648746.34280013', ...,
       u'3645870.67565062', u'3645893.61216942', u'3645866.95833722'],
      dtype='U16')
z: array([u'1600.2589433603', u'1535.77224937826', u'1429.01016684435', ...,
       u'341.064685015939', u'343.452275622636', u'312.491347198375'],
      dtype='U16')

и, наконец, вот ошибкавыводит в строке ax.scatter (x, y, z, marker = 'o'):


Traceback (most recent call last):
  File "C:\stripped_3dplot.py", line 27, in 
    ax.scatter(x, y, z, marker='o')
  File "C:\Python27\lib\site-packages\mpl_toolkits\mplot3d\axes3d.py", line 1019, in scatter
    patches = Axes.scatter(self, xs, ys, *args, **kwargs)
  File "C:\Python27\lib\site-packages\matplotlib\axes.py", line 5813, in scatter
    minx = np.amin(temp_x)
  File "C:\Python27\lib\site-packages\numpy\core\fromnumeric.py", line 1846, in amin
    return amin(axis, out)
TypeError: cannot perform reduce with flexible type

Как я уже сказал, я думаю, что это был просто неправильный тип, но если вы все можете сказать мне, чтоТип вызывает ошибку, я мог чему-то научиться.

Спасибо.

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