2013-07-31 3 views
1

У меня есть двумерная матрица numpy, и я хочу создать дискретный график плотности, используя его. Дискретный в том смысле, что в каждой точке (i,j) на графике должна быть размещена точка, цвет которой должен соответствовать значению (i,j)-го элемента 2D-массива. Я не хочу использовать imshow, потому что я не хочу никакой интерполяции, и я также хочу контролировать размер точек, которые нужно разместить.Дискретный график плотности в matplotlib

ответ

3

Вы пробовали imshow с interpolation='nearest'? Это близко к тому, что вы хотите?

import matplotlib.pyplot as plt 
import numpy as np 

data = np.arange(100).reshape(10, 10) 
fig, ax = plt.subplots() 
ax.imshow(data, interpolation='nearest') 
plt.show() 

enter image description here

0

Вы всегда можете сделать это явно для каждой точки, но это будет происходить медленно. Я думаю, что лучше всего делать это по строкам (держите слово y фиксированным) и использовать функцию scatter.

import matplotlib.pylab as plt 
from mpl_toolkits.mplot3d import Axes3D 

n = 100 
x = plt.linspace(0,5, n) 
y = plt.linspace(0,5, n) 

ax = plt.subplot(111) 
for i in range(n): 
    y_fixed = y[i] * plt.ones(n) 
    z = [(abs(plt.cos(x[i])), 0.0, 0.5) for i in range(n)] 
    ax.scatter(x, y_fixed, c=z) 

plt.show() 

enter image description here

Размер также регулируется в этой усадьбе, используя s аргумент.

Без каких-либо данных о том, как вы хотите указать цвет, я использовал значение RGB. Возможно, вам придется нормализовать, однако c= возьмет что-нибудь в значительной степени и превратит его в цвет, но это может быть не очень важно для вас.

Для более с разбросом увидеть демо-here

+0

Я не могу понять, как реализовать это в моем случае, как у меня есть 2D массив. Не могли бы вы показать мне, как это сделать с помощью 2D-массива? – lovespeed

+0

Вы берете фрагмент из вашего 2D-массива, соответствующий фиксированному 'y' (или' x'). И используйте это как аргумент цвета, например 'c = array [i]'. – Greg

 Смежные вопросы

  • Нет связанных вопросов^_^