Ответ 1
Функция pylab.scatter
принимает размер значения, основанный на размере в точках ^ 2. Этот размер не зависит от осей, так же как и характер диаграммы рассеяния (не имеет смысла, если вы уклоняетесь от области на участке рассеяния, что точки становятся больше).
Если вы хотите сказать, чтобы рисовать круги заданного размера, вы должны использовать команду circle в pylab
import pylab
axes = pylab.axes()
circle1 = pylab.Circle((0,0), radius=20, alpha=.5)
circle2 = pylab.Circle((0.5,0.5), radius=20, alpha=.5)
axes.add_patch(circle1)
axes.add_patch(circle2)
pylab.axis('scaled')
pylab.show()
Если вам нужно что-то с рассеянным зазором, как способность, вы можете сделать что-то вроде
import pylab
import matplotlib
def my_circle_scatter(axes, x_array, y_array, radius=0.5, **kwargs):
for x, y in zip(x_array, y_array):
circle = pylab.Circle((x,y), radius=radius, **kwargs)
axes.add_patch(circle)
return True
def my_square_scatter(axes, x_array, y_array, size=0.5, **kwargs):
size = float(size)
for x, y in zip(x_array, y_array):
square = pylab.Rectangle((x-size/2,y-size/2), size, size, **kwargs)
axes.add_patch(square)
return True
def my_polygon_scatter(axes, x_array, y_array, resolution=5, radius=0.5, **kwargs):
''' resolution is number of sides of polygon '''
for x, y in zip(x_array, y_array):
polygon = matplotlib.patches.CirclePolygon((x,y), radius=radius, resolution=resolution, **kwargs)
axes.add_patch(polygon)
return True
axes=pylab.axes()
my_circle_scatter(axes, [0,0.5], [0,0.5], radius=2, alpha=.5, color='b')
my_square_scatter(axes, [-3,-4,2,3], [1,-3,0,3], size=.5, alpha=.5, color='r')
my_polygon_scatter(axes, [-1,-2,3], [-3,0,3], radius=.5, resolution=3, alpha=.5, color='g')
my_polygon_scatter(axes, [4,1.5,3], [2,-1,-3], radius=.5, resolution=5, alpha=.5, color='k')
pylab.axis('scaled')
pylab.axis([-5,5,-5,5])
pylab.show()
См. http://matplotlib.sourceforge.net/api/artist_api.html#module-matplotlib.patches для других доступных объектов.
Пример вывода из первого фрагмента:
Пример вывода из второго фрагмента:
EDIT для Griff: если вы хотите обрабатывать другой радиус для каждой точки, вы можете сделать что-то прямое:
def my_circle_scatter_radii(axes, x_array, y_array, radii_array, **kwargs):
for (x, y, r) in zip(x_array, y_array, radii_array):
circle = pylab.Circle((x,y), radius=r, **kwargs)
axes.add_patch(circle)
return True
Логика для обработки обоих случаев одновременно также проста (например, проверьте, является ли ее radii_array int/float, и если это делает его массивом).