2015-11-13 3 views
0

Я хотел бы построить большой образец, хранящийся в массивах a и b с функцией matplotlib's hist2d. Однако генерация H, xedges, yedges, img не работает непосредственно для этих данных, так как использует слишком много памяти. Она работает на половину числа образцов, хотя, так что я хотел бы сделать что-то вродеmatplotlib: plot hist2d кусочно

H_1, xedges_1, yedges_1, img_1 = plt.hist2d(a[:len(a)/2], b[:len(b)/2], bins = 10) 

с последующим

H_2, xedges_2, yedges_2, img_2 = plt.hist2d(a[len(a)/2:], b[len(b)/2:], bins = 10) 

Хотя, возможно, удалением первой половины массивов после вычисления первого набора переменные. Есть ли способ объединить эти два набора переменных и создать комбинированный график для данных?

ответ

1

Если (и только если!) Вы указываете края бункера вручную, то ваши гистограммы будут совместимы. Вы можете просто добавить вхождений каждого бина для обоих подмножеств, и вы будете восстановить полную гистограмму:

import numpy as np 
import matplotlib.pyplot as plt 

a=np.random.rand(200)*10 
b=np.random.rand(200)*10 
binmin=min(a.min(),b.min()) 
binmax=max(a.max(),b.max()) 
H_1, xedges_1, yedges_1, img_1 = plt.hist2d(a[:len(a)/2], b[:len(b)/2], bins = np.linspace(binmin,binmax,10+1)) 
H_2, xedges_2, yedges_2, img_2 = plt.hist2d(a[len(a)/2:], b[len(b)/2:], bins = np.linspace(binmin,binmax,10+1)) 
H_3, xedges_3, yedges_3, img_3 = plt.hist2d(a, b, bins = np.linspace(binmin,binmax,10+1)) 

Результат:

In [150]: (H_1+H_2==H_3).all() 
Out[150]: True 

Что вы можете легко сюжет с помощью plt.pcolor. Вот что hist2d кажется использовать, хотя и с дополнительным транспонированной данных:

plt.figure() 
plt.pcolor((H_1+H_2).T) 

img_3 (слева) против (H_1+H_2).T (справа):

from H_3from (H_1+H_2).T

+0

Спасибо. Однако в моем случае 'a' представляет собой просто отсортированный массив целых чисел, и я хотел бы явно указать количество бункеров (а не краев бинов) по осям x и y. Можно ли использовать ваш метод? – 17andLearning

+0

Вы можете определить, что вам нравится, нужно использовать одно и то же определение для обоих подмножеств. Для 'nbin' бункеров вы можете просто использовать' np.linspace (binmin, binmax, nbin + 1) ', который будет равномерно создавать границы' nbin + 1' между 'binmin' и' binmax' (возможно, вам придется изменить две границы, чтобы убедиться, что каждая точка включена в гистограммы). Если ваш вопрос связан с наличием * отдельных * ящиков в двух измерениях: вы можете использовать 'bins = [np.linspace (a.min(), a.max(), nbin_a + 1), np.linspace (b. мин(), b.max(), nbin_b + 1)] '. –