2015-11-29 2 views
2

Я новичок в этом, и я пытаюсь представить структурированный массив, npy-файл, как график рассеяния. Я не совсем уверен, каким должен быть мой другой аргумент. Я думал, что я должен использовать свои значения для x и y, но я не уверен.Scatter() принимает не менее 2 аргументов (1 данный)

import matplotlib.pyplot as plt 
import numpy as np 
import os 

path = '/users/username/Desktop/untitled folder/python  files/MSII_phasespace/' 

os.chdir(path) 

data = np.load('msii_phasespace.npy',mmap_mode='r') 

# data.size: 167197 
# data.shape: (167197,) 
# data.dtype: dtype([('x', '<f4'), ('y', '<f4'), ('z', '<f4'), 
    # ('velx', '<f4'), ('vely', '<f4'), ('velz', '<f4'), ('m200', '<f4')]) 

plt.title ("MS II data structure") 
plt.xlabel(r'$\Omega_{\mu \nu}$') 
plt.ylabel(r'$\Omega^{\mu \nu}$') 

plt.scatter(data) 
plt.show() 

Ввод этого выдает ошибку:

TypeError: scatter() takes at least 2 arguments (1 given)

+0

Что именно неясно? График рассеяния всегда между двумя векторами. Об этом сообщает сообщение об ошибке. – cel

+0

Невозможно создать такой участок с этим файлом? – DarthLazar

+0

Вы уверены, что поняли концепцию разброса? Вы можете захотеть google и посмотреть результаты. Это то, что вы на самом деле хотите здесь построить? – cel

ответ

0

У вас есть structured array там. Matplotlib не знает, что с ним делать. Как указано в documentation for matplotlib.pyplot.scatter(), вам необходимо указать два входных массива x и y.

С dtype выхода, я понимаю, что ваш структурированный массив имеет значения для 'x', 'y', 'z', 'velx', 'vely', 'velz' и 'm200'. Я понятия не имею, что они есть, но для того, чтобы создать график рассеяния, необходимо указать два компонента, например:

plt.scatter(data['x'], data['y']) 

Предполагая, что 'm200' должны быть сопоставлены с шириной точек рассеяния, вы можете использовать :

plt.scatter(data['x'], data['y'], s=data['m200']) 
+0

Хорошо, это сработало. Я сделаю это, чтобы понять это более подробно. Благодарю вас. – DarthLazar

1

plt.scatterplt.scatter Требуется как минимум два аргумента (что говорит об ошибке).

Если вы смотрите в документации (http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.scatter), вы увидите эту подпись:

scatter(x, y, s=20, c=None, marker='o', cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, hold=None, data=None, **kwargs) 

Таким образом, вы должны обеспечить, по меньшей мере, массив для каждого из значений x и y:

plt.scatter(data['x'], data['y']) 

Начиная с matplotlib 1.5, вы также можете использовать этот синтаксис для доступа к данным из структурированного массива:

plt.scatter('x', 'y', data=data) 
Смежные вопросы