ile bu hale başardı). Her halükarda, sorunuza yanıt olarak, hexbin'e minimum sayımı sağlayabilirsiniz (tüm boş hücreleri şeffaf olarak bırakarak). İşte bazı deneyler yapmak isteyebilirsiniz herkes için rasgele kümeleri üretmek için küçük bir işlev var (yorum sizin soru, kullanıcılardan çok ilgi inşa etmek gibiydi kullanmak için ücretsiz düştü):
import numpy as np
import matplotlib.pyplot as plt
# Building random clusters
def cluster(number):
def clusterAroundX(a,b,number):
x = np.random.normal(size=(number,))
return (x-x.min())*(b-a)/(x.max()-x.min())+a
def clusterAroundY(x,m,b):
y = x.copy()
half = (x.max()-x.min())/2
middle = half+x.min()
for i in range(x.shape[0]):
std = (x.max()-x.min())/(2+10*(np.abs(middle-x[i])/half))
y[i] = np.random.normal(x[i]*m+b,std)
return y + np.abs(y.min())
m,b = np.random.randint(-700,700)/100,np.random.randint(0,50)
print(m,b)
f = np.random.randint(0,30)
l = f + np.random.randint(10,50)
x = clusterAroundX(f,l,number)
y = clusterAroundY(x,m,b)
return x,y
, bu kullanarak kod bir kaç küme ürettim, scatterplot ile bunları çizdim (genellikle bunu kendi küme analizlerimde kullanırım, ama sanırım bende denizaltına bakmalıyım), hexbin, imshow (daha fazla kontrol için pcolormesh için değişim) ve konturf:
:
clusters = 5
samples = 300
xs,ys = [],[]
for i in range(clusters):
x,y = cluster(samples)
xs.append(x)
ys.append(y)
# SCATTERPLOT
alpha = 1
for i in range(clusters):
x,y = xs[i],ys[i]
color = (np.random.randint(0,255)/255,np.random.randint(0,255)/255,np.random.randint(0,255)/255)
plt.scatter(x,y,c = color,s=90,alpha=alpha)
plt.show()
# HEXBIN
# Hexbin seems a bad choice because I think you cant control the size of the hexagons.
alpha = 1
cmaps = ['Reds','Blues','Purples','Oranges','Greys']
for i in range(clusters):
x,y = xs[i],ys[i]
plt.hexbin(x,y,gridsize=20,cmap=cmaps.pop(),mincnt=1)
plt.show()
# IMSHOW
alpha = 1
cmaps = ['Reds','Blues','Purples','Oranges','Greys']
xmin,xmax = min([i.min() for i in xs]), max([i.max() for i in xs])
ymin,ymax = min([i.min() for i in ys]), max([i.max() for i in ys])
nums = 30
xsize,ysize = (xmax-xmin)/nums,(ymax-ymin)/nums
im = [np.zeros((nums+1,nums+1)) for i in range(len(xs))]
def addIm(im,x,y):
for i,j in zip(x,y):
im[i,j] = im[i,j]+1
return im
for i in range(len(xs)):
xo,yo = np.int_((xs[i]-xmin)/xsize),np.int_((ys[i]-ymin)/ysize)
#im[i][xo,yo] = im[i][xo,yo]+1
im[i] = addIm(im[i],xo,yo)
im[i] = np.ma.masked_array(im[i],mask=(im[i]==0))
for i in range(clusters):
# REPLACE BY pcolormesh if you need more control over image locations.
plt.imshow(im[i].T,origin='lower',interpolation='nearest',cmap=cmaps.pop())
plt.show()
# CONTOURF
cmaps = ['Reds','Blues','Purples','Oranges','Greys']
for i in range(clusters):
# REPLACE BY pcolormesh if you need more control over image locations.
plt.contourf(im[i].T,origin='lower',interpolation='nearest',cmap=cmaps.pop())
plt.show()
, sonuç folloing vardır
İlginç soru
. Her bir hexbin için 'alpha 'ayarlamayı denediniz mi? Minimal, Tam ve Doğrulanabilir bir örnek yapabilir misiniz? – farenorth
@Labibah Bu, aynı soruya ilginç geliyor: Minimal, Tam ve Doğrulanabilir bir örnek yapabilir misiniz? – rll
@farenorth ile aynı fikirdeyim. Çizim kodunuzla birlikte rastgele sayılarla (kümeleme işleminin nasıl yapıldığını biçimlendirilmiş olarak biçimlendirilmiş) sahte bir veri kümesi oluşturabilir/oluşturabilir misiniz? Diğerleri ile oynamak için çok daha hızlı olacak ... – tmthydvnprt