Sto provando a colorare un diagramma di Voronoi creato usando scipy.spatial.Voronoi
. Ecco il mio codice:Colorize Voronoi Diagram
import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import Voronoi, voronoi_plot_2d
# make up data points
points = np.random.rand(15,2)
# compute Voronoi tesselation
vor = Voronoi(points)
# plot
voronoi_plot_2d(vor)
# colorize
for region in vor.regions:
if not -1 in region:
polygon = [vor.vertices[i] for i in region]
plt.fill(*zip(*polygon))
plt.show()
L'immagine risultante:
Come potete vedere alcune delle regioni Voronoi al confine dell'immagine non sono colorati. Questo perché alcuni indici dei vertici di Voronoi per queste regioni sono impostati su -1
, ad esempio per quei vertici al di fuori del diagramma di Voronoi. Secondo la documentazione:
limitata: (lista di lista di numeri interi, forma (nregions, *)) Indici dei vertici Voronoi formanti ciascuna regione Voronoi. -1 indica il vertice fuori dal diagramma di Voronoi.
Per colorare queste regioni così, ho cercato di rimuovere solo questi vertici "fuori" dal poligono, ma che non ha funzionato. Penso, ho bisogno di compilare alcuni punti al confine della regione dell'immagine, ma non riesco a capire come raggiungere questo ragionevole.
Qualcuno può aiutare?
Forse un piccolo errore, non è sicuro se questo è cambiato con la nuova versione di numpy, ma facendo '.ptp()' trova la differenza tra il valore più grande e quello più piccolo, quindi '.max()' non fa nulla. Penso che quello che vuoi sia '.ptp (axis = 0) .max()'. –
Non so se qualcuno lo legge, ma qual è il punto della linea: 'se v2 <0: v1, v2 = v2, v1' – Luca
Non importa. Ora che l'ho letto correttamente, lo si fa per garantire che il vertice finito sia sempre v2. – Luca