2013-02-13 3 views

ответ

3

Редактировать: Мой первоначальный ответ используется ax.scatter. Существует проблема с этим: Если две точки бок о бок, ax.scatter может сделать их немного пространства между ними, в зависимости от масштаба:

К примеру, с

data = np.array([(2,3),(3,3)]) 

Здесь является увеличенной в деталях:

enter image description here

Так вот альтернативное решение, которое устраняет эту проблему:

import matplotlib.pyplot as plt 
import numpy as np 

data = np.array([(2,3),(3,3),(45,4),(3,65)]) 
N = data.max() + 5 

# color the background white (1 is white) 
arr = np.ones((N,N), dtype = 'bool') 
# color the dots black (0) 
arr[data[:,1], data[:,0]] = 0 

fig = plt.figure() 
ax = fig.add_subplot(1, 1, 1) 

ax.imshow(arr, interpolation='nearest', cmap = 'gray') 
ax.invert_yaxis() 
# ax.axis('off') 
plt.show() 

enter image description here

Независимо от того, сколько вы увеличите соседние квадраты в (2,3) и (3,3) будет оставаться бок о бок.

К сожалению, в отличие от ax.scatter, используя ax.imshow требует построения N x N массива, поэтому он может быть больше памяти интенсивно, чем при использовании ax.scatter. Это не должно быть проблемой, если только data содержит очень большие числа.

+0

Вы, сэр, являются легендой. Спасибо вам большое. –

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