Двумерная гистограмма Python с дискретной цветовой картой

#python #matplotlib #histogram

#python #matplotlib #гистограмма

Вопрос:

У меня есть следующий код, который отображает точки, а затем отображает гистограмму:

 # Produce a number of points in x-y from 1 distribution. 
mean = [3,4]
cov = [[3,1],[1,3]] 
x,y = np.random.multivariate_normal(mean,cov,1000).T
plt.plot(x,y,'x'); plt.axis('equal'); plt.show()
Z = np.array([x,y])

# Produce 2D histogram projection
H,xedges,yedges = np.histogram2d(x,y,10,normed=False)
X,Y = np.meshgrid(xedges,yedges)
plt.imshow(H)
plt.grid(True)
  

Я просто хочу, чтобы гистограмма в imshow () была более блочной, а не настолько нечеткой, чтобы плотность в каждой квадратной ячейке была более четкой. Я не уверен, как это сделать.

Ответ №1:

Итак, ваш исходный код будет выглядеть следующим образом

из matplotlib импортируйте pyplot как plt импортируйте numpy как np

 # Produce a number of points in x-y from 1 distribution. 
mean = [3,4]
cov = [[3,1],[1,3]] 
x,y = np.random.multivariate_normal(mean,cov,1000).T
plt.plot(x,y,'x'); plt.axis('equal'); plt.show()
Z = np.array([x,y])

# Produce 2D histogram projection
H,xedges,yedges = np.histogram2d(x,y,10,normed=False)
X,Y = np.meshgrid(xedges,yedges)
plt.imshow(H)
plt.grid(True)
  

введите описание изображения здесь

введите описание изображения здесь

И вы хотите что-то подобное, если я правильно понимаю «blockier»!?

 plt.hist2d(x, y, bins=40)
plt.colorbar()
plt.show()
  

введите описание изображения здесь

Ответ №2:

Вы можете просто установить метод интерполяции, который imshow использует:

 plt.imshow(H, interpolation = 'none')
  

Вот пример, показывающий различные методы интерполяции, а в документах перечислены все реализованные методы.