2016-09-14 2 views
1

У меня есть большой numpy.ndarray, который я хочу сделать графиком, где ось x имеет отношение к значениям в массиве, а ось y показывает, как часто это значение появляется в массив. Чтобы быть ясным, меня не волнует порядок данных в массиве, или если их порядок запутался, я просто хочу взять цифры, выловить их, а потом заговорить.Создание графика значений массива Numpy

шаги мне до сих пор, что я хочу сделать, каждый отдельный в моем Jupyter ноутбук

  • Открыть/прочитать мой массив (это 1024х1024, так что довольно большой) - шаг сделал

  • Convert массив в list- сделал

  • выплюнуть нулевые значения в массиве ... в настоящее время не работает

  • данные бен CoU значения нт ... действительно потерял здесь

  • Scatter участок земли- обрезается против Count- эта часть будет хорошо, как только предыдущий две работы, Matplotlib и ладим

    импорта NumPy в нп

    импорт Matplotlib .pyplot в PLT

    scidata = нп массив данных, это 1024х1024

    lsci = []

    для г в диапазоне (1024):

    scilist = scidata[r,:].tolist() 
    
    lsci.extend(scilist) 
    
    trimmed = lsci 
    

    для пункта в lsci:

    if 12.58 <= i== 12.59: #the null value I don't want is in this range 
    
        r.remove(item) 
    

Я извиняюсь, если бы я был больше, но это то, где вещи становятся рискованными для меня и Мне немного стыдно публиковать то, что я пробовал, и потерпел неудачу, потому что большинство из них - тупики. Единственное реальное решение, о котором я думал, - это бинирование данных ... но это не будет работать для графика рассеяния, потому что длина двух списков будет не такой, а гистограмма не то, что я хочу, так как моя конечный продукт в любом случае. Итак, есть ли другой подход, который я могу использовать для этого, о котором я не знаю? (Я чувствую, что есть некоторый кусок знаний о кодировании, который я только что не узнал - наверняка я не первый человек, который захочет это сделать.) Спасибо!

Edit: К сожалению, все мой код не отображается в виде кода, даже если я ставлю четыре места ...

+0

Вы действительно просите, как создать гистограмму? Затем попробуйте использовать 'matplotlib.pyplot.hist (yourarray.ravel())' и использовать необязательные аргументы 'bins' и' range' для определения количества ящиков и диапазона данных – dnalow

+0

FYI - вы можете выделить все ваш текст кода и нажмите 'CTRL + K', чтобы преобразовать его в формат кода – NickBraunagel

ответ

0

«Binning», безусловно, функция гистограммы, но я получаю впечатление, которое вы хотите простую сводную таблицу ,Как насчет:

  1. Удалить нежелательную значение
  2. Преобразовать ваш NumPy массив dataframe
  3. Создание сводной таблицы из dataframe
  4. результаты Plot

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
% matplotlib inline 

a = np.random.randint(10, size=100) # array([3, 0, 3, 8, 1, 9, 1, 8,...]) 
exclude_value = 3 # change as required 
a_new = [item for item in a if item != exclude_value] # new list without exclude value 

df = pd.DataFrame(a_new).pivot_table(columns=0, aggfunc='size') 

x = df.index.values 
y = df.values 
plt.bar(x,y) 

plt.xticks(x) 
plt.show() 

ВЫВОД:

(обратите внимание, как одна величина была исключена, в данном случае 3) enter image description here

+0

Я думаю, что этот подход - это то, что я хочу сделать, но две вещи: во-первых, нулевое значение на самом деле не является NaN в этом массиве по причинам I не хотите попасть (но устанавливается в 12.85, скажем, вместо NaN). Поэтому моя попытка отфильтровать это число, но этот шаг фильтрации не работает. Во-вторых, для шага pandas я получаю сообщение об ошибке: «pivot_table() получил неожиданный аргумент ключевого слова« столбцы ». Мне действительно непонятно, как искать эту ошибку, что может быть вызвано этим. – kb3hts

+0

См. Обновление. Дайте мне знать, если вы все еще видите ошибку pandas. – NickBraunagel

0

То же самое Ник Braunage предложенного, но без панд:

import numpy as np 
import matplotlib.pyplot as plt 

a = np.random.randint(10, size=100) # or use yourarray.ravel() here to make it flat 

num, bins, _ = plt.hist(a) 
plt.show() 

или

num, bins = np.histogram(a) 
plt.bar(bins[:-1], num) 
plt.show() 
Смежные вопросы