Note
Go to the end to download the full example code.
Clustering Vectors#
This can be used to segment a 4-D STEM dataset into different clusters based on the diffraction pattern at each real space position.
import pyxem as pxm
from scipy.ndimage import gaussian_filter
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
# Getting the vectors for some dataset
s = pxm.data.mgo_nanocrystals()
s.data[s.data < 120] = 1
s.filter(gaussian_filter, sigma=(0.5, 0.5, 0, 0), inplace=True) # only in real space
s.template_match_disk(disk_r=3, subtract_min=False, inplace=True)
vectors = s.get_diffraction_vectors(threshold_abs=0.5, min_distance=3)
# Now we can convert the vectors into a 2D array of rows/columns
flat_vectors = (
vectors.flatten_diffraction_vectors()
) # flatten the vectors into a 2D array
scan = DBSCAN(eps=1.0, min_samples=2)
# It is very important that we first normalize the real and reciprocal space distances
# The column scale factors map the real space and reciprocal space distances to the same scale
# Here this means that the clustering algorithm operates on 10 nm in real space and .1 nm^-1 in
# reciprocal space based on the units for the vectors.
clustered = flat_vectors.cluster(
scan,
column_scale_factors=[10, 10, 0.05, 0.05],
columns=[0, 1, 2, 3],
min_vectors=40,
)
m, p = clustered.to_markers(s, alpha=0.8, get_polygons=True)
s.plot()
s.add_marker(m)
s.add_marker(p, plot_on_signal=False)
[ ] | 0% Completed | 141.10 us
[ ] | 0% Completed | 100.50 ms
[ ] | 0% Completed | 200.90 ms
[ ] | 0% Completed | 301.30 ms
[ ] | 0% Completed | 401.73 ms
[ ] | 0% Completed | 502.21 ms
[ ] | 0% Completed | 602.63 ms
[ ] | 0% Completed | 702.97 ms
[ ] | 0% Completed | 803.31 ms
[ ] | 0% Completed | 903.78 ms
[ ] | 0% Completed | 1.00 s
[ ] | 0% Completed | 1.10 s
[ ] | 0% Completed | 1.21 s
[ ] | 0% Completed | 1.31 s
[## ] | 6% Completed | 1.41 s
[### ] | 8% Completed | 1.51 s
[### ] | 8% Completed | 1.61 s
[### ] | 8% Completed | 1.71 s
[### ] | 8% Completed | 1.81 s
[### ] | 8% Completed | 1.91 s
[### ] | 8% Completed | 2.01 s
[### ] | 8% Completed | 2.11 s
[### ] | 8% Completed | 2.21 s
[### ] | 8% Completed | 2.31 s
[### ] | 8% Completed | 2.41 s
[### ] | 8% Completed | 2.51 s
[### ] | 8% Completed | 2.61 s
[### ] | 8% Completed | 2.71 s
[### ] | 8% Completed | 2.81 s
[###### ] | 16% Completed | 2.91 s
[###### ] | 16% Completed | 3.01 s
[###### ] | 16% Completed | 3.11 s
[###### ] | 16% Completed | 3.21 s
[###### ] | 16% Completed | 3.31 s
[###### ] | 16% Completed | 3.41 s
[###### ] | 16% Completed | 3.52 s
[###### ] | 16% Completed | 3.62 s
[###### ] | 16% Completed | 3.72 s
[###### ] | 16% Completed | 3.82 s
[###### ] | 16% Completed | 3.92 s
[###### ] | 16% Completed | 4.02 s
[###### ] | 16% Completed | 4.12 s
[###### ] | 16% Completed | 4.22 s
[######### ] | 24% Completed | 4.32 s
[######### ] | 24% Completed | 4.42 s
[######### ] | 24% Completed | 4.52 s
[######### ] | 24% Completed | 4.62 s
[######### ] | 24% Completed | 4.72 s
[######### ] | 24% Completed | 4.82 s
[######### ] | 24% Completed | 4.92 s
[######### ] | 24% Completed | 5.02 s
[######### ] | 24% Completed | 5.12 s
[######### ] | 24% Completed | 5.22 s
[######### ] | 24% Completed | 5.32 s
[######### ] | 24% Completed | 5.42 s
[######### ] | 24% Completed | 5.52 s
[######### ] | 24% Completed | 5.62 s
[############ ] | 32% Completed | 5.73 s
[############ ] | 32% Completed | 5.83 s
[############ ] | 32% Completed | 5.93 s
[############ ] | 32% Completed | 6.03 s
[############ ] | 32% Completed | 6.13 s
[############ ] | 32% Completed | 6.23 s
[############ ] | 32% Completed | 6.33 s
[############ ] | 32% Completed | 6.43 s
[############ ] | 32% Completed | 6.53 s
[############ ] | 32% Completed | 6.63 s
[############ ] | 32% Completed | 6.73 s
[############ ] | 32% Completed | 6.83 s
[############ ] | 32% Completed | 6.93 s
[############ ] | 32% Completed | 7.03 s
[################ ] | 40% Completed | 7.13 s
[################ ] | 40% Completed | 7.23 s
[################ ] | 40% Completed | 7.33 s
[################ ] | 40% Completed | 7.43 s
[################ ] | 40% Completed | 7.53 s
[################ ] | 40% Completed | 7.63 s
[################ ] | 40% Completed | 7.73 s
[################ ] | 40% Completed | 7.83 s
[################ ] | 40% Completed | 7.94 s
[################ ] | 40% Completed | 8.04 s
[################ ] | 40% Completed | 8.14 s
[################ ] | 40% Completed | 8.24 s
[################ ] | 40% Completed | 8.34 s
[################ ] | 40% Completed | 8.44 s
[################### ] | 48% Completed | 8.54 s
[################### ] | 48% Completed | 8.64 s
[################### ] | 48% Completed | 8.74 s
[################### ] | 48% Completed | 8.84 s
[################### ] | 48% Completed | 8.94 s
[################### ] | 48% Completed | 9.04 s
[################### ] | 48% Completed | 9.14 s
[################### ] | 48% Completed | 9.24 s
[################### ] | 48% Completed | 9.34 s
[################### ] | 48% Completed | 9.44 s
[################### ] | 48% Completed | 9.54 s
[################### ] | 48% Completed | 9.64 s
[################### ] | 48% Completed | 9.74 s
[################### ] | 48% Completed | 9.84 s
[###################### ] | 56% Completed | 9.94 s
[###################### ] | 56% Completed | 10.04 s
[###################### ] | 56% Completed | 10.14 s
[###################### ] | 56% Completed | 10.24 s
[###################### ] | 56% Completed | 10.35 s
[###################### ] | 56% Completed | 10.45 s
[###################### ] | 56% Completed | 10.55 s
[###################### ] | 56% Completed | 10.65 s
[###################### ] | 56% Completed | 10.75 s
[###################### ] | 56% Completed | 10.85 s
[###################### ] | 56% Completed | 10.95 s
[###################### ] | 56% Completed | 11.05 s
[###################### ] | 56% Completed | 11.15 s
[###################### ] | 56% Completed | 11.25 s
[######################### ] | 64% Completed | 11.35 s
[######################### ] | 64% Completed | 11.45 s
[######################### ] | 64% Completed | 11.55 s
[######################### ] | 64% Completed | 11.65 s
[######################### ] | 64% Completed | 11.75 s
[######################### ] | 64% Completed | 11.85 s
[######################### ] | 64% Completed | 11.95 s
[######################### ] | 64% Completed | 12.05 s
[######################### ] | 64% Completed | 12.15 s
[######################### ] | 64% Completed | 12.25 s
[######################### ] | 64% Completed | 12.35 s
[######################### ] | 64% Completed | 12.45 s
[######################### ] | 64% Completed | 12.55 s
[######################### ] | 64% Completed | 12.65 s
[############################ ] | 72% Completed | 12.75 s
[############################ ] | 72% Completed | 12.86 s
[############################ ] | 72% Completed | 12.96 s
[############################ ] | 72% Completed | 13.06 s
[############################ ] | 72% Completed | 13.16 s
[############################ ] | 72% Completed | 13.26 s
[############################ ] | 72% Completed | 13.36 s
[############################ ] | 72% Completed | 13.46 s
[############################ ] | 72% Completed | 13.56 s
[############################ ] | 72% Completed | 13.66 s
[############################ ] | 72% Completed | 13.76 s
[############################ ] | 72% Completed | 13.86 s
[############################ ] | 72% Completed | 13.96 s
[############################ ] | 72% Completed | 14.06 s
[############################## ] | 76% Completed | 14.16 s
[################################ ] | 80% Completed | 14.26 s
[################################ ] | 80% Completed | 14.36 s
[################################ ] | 80% Completed | 14.46 s
[################################ ] | 80% Completed | 14.56 s
[################################ ] | 80% Completed | 14.66 s
[################################ ] | 80% Completed | 14.76 s
[################################ ] | 80% Completed | 14.86 s
[################################ ] | 80% Completed | 14.96 s
[################################ ] | 80% Completed | 15.06 s
[################################ ] | 80% Completed | 15.17 s
[################################ ] | 80% Completed | 15.27 s
[################################ ] | 80% Completed | 15.37 s
[################################ ] | 80% Completed | 15.47 s
[################################ ] | 80% Completed | 15.57 s
[################################### ] | 88% Completed | 15.67 s
[################################### ] | 88% Completed | 15.77 s
[################################### ] | 88% Completed | 15.87 s
[################################### ] | 88% Completed | 15.97 s
[################################### ] | 88% Completed | 16.07 s
[################################### ] | 88% Completed | 16.17 s
[################################### ] | 88% Completed | 16.27 s
[################################### ] | 88% Completed | 16.37 s
[################################### ] | 88% Completed | 16.47 s
[################################### ] | 88% Completed | 16.57 s
[################################### ] | 88% Completed | 16.67 s
[################################### ] | 88% Completed | 16.77 s
[################################### ] | 88% Completed | 16.87 s
[################################### ] | 88% Completed | 16.97 s
[###################################### ] | 96% Completed | 17.07 s
[###################################### ] | 96% Completed | 17.17 s
[###################################### ] | 96% Completed | 17.27 s
[###################################### ] | 96% Completed | 17.37 s
[###################################### ] | 96% Completed | 17.47 s
[###################################### ] | 96% Completed | 17.58 s
[########################################] | 100% Completed | 17.68 s
[ ] | 0% Completed | 142.12 us
[ ] | 0% Completed | 100.51 ms
[ ] | 0% Completed | 201.15 ms
[ ] | 0% Completed | 301.48 ms
[ ] | 0% Completed | 402.21 ms
[ ] | 0% Completed | 502.55 ms
[ ] | 0% Completed | 603.28 ms
[ ] | 0% Completed | 703.59 ms
[ ] | 0% Completed | 803.92 ms
[### ] | 8% Completed | 904.30 ms
[### ] | 8% Completed | 1.01 s
[### ] | 8% Completed | 1.11 s
[### ] | 8% Completed | 1.21 s
[### ] | 8% Completed | 1.31 s
[### ] | 8% Completed | 1.41 s
[### ] | 8% Completed | 1.51 s
[### ] | 8% Completed | 1.61 s
[### ] | 8% Completed | 1.71 s
[#### ] | 12% Completed | 1.81 s
[#### ] | 12% Completed | 1.91 s
[#### ] | 12% Completed | 2.01 s
[#### ] | 12% Completed | 2.11 s
[#### ] | 12% Completed | 2.21 s
[#### ] | 12% Completed | 2.31 s
[#### ] | 12% Completed | 2.41 s
[#### ] | 12% Completed | 2.51 s
[#### ] | 12% Completed | 2.61 s
[#### ] | 12% Completed | 2.71 s
[###### ] | 16% Completed | 2.82 s
[###### ] | 16% Completed | 2.92 s
[###### ] | 16% Completed | 3.02 s
[###### ] | 16% Completed | 3.12 s
[###### ] | 16% Completed | 3.22 s
[###### ] | 16% Completed | 3.32 s
[###### ] | 16% Completed | 3.42 s
[###### ] | 16% Completed | 3.52 s
[######### ] | 24% Completed | 3.62 s
[######### ] | 24% Completed | 3.72 s
[######### ] | 24% Completed | 3.82 s
[######### ] | 24% Completed | 3.92 s
[######### ] | 24% Completed | 4.02 s
[######### ] | 24% Completed | 4.12 s
[######### ] | 24% Completed | 4.22 s
[######### ] | 24% Completed | 4.32 s
[########### ] | 28% Completed | 4.42 s
[############ ] | 32% Completed | 4.52 s
[############ ] | 32% Completed | 4.62 s
[############ ] | 32% Completed | 4.72 s
[############ ] | 32% Completed | 4.82 s
[############ ] | 32% Completed | 4.93 s
[############ ] | 32% Completed | 5.03 s
[############ ] | 32% Completed | 5.13 s
[############ ] | 32% Completed | 5.23 s
[############ ] | 32% Completed | 5.33 s
[############ ] | 32% Completed | 5.43 s
[############ ] | 32% Completed | 5.53 s
[############ ] | 32% Completed | 5.63 s
[############ ] | 32% Completed | 5.73 s
[################ ] | 40% Completed | 5.83 s
[################ ] | 40% Completed | 5.93 s
[################ ] | 40% Completed | 6.03 s
[################ ] | 40% Completed | 6.13 s
[################ ] | 40% Completed | 6.23 s
[################ ] | 40% Completed | 6.33 s
[################ ] | 40% Completed | 6.43 s
[################ ] | 40% Completed | 6.53 s
[################### ] | 48% Completed | 6.63 s
[################### ] | 48% Completed | 6.73 s
[################### ] | 48% Completed | 6.83 s
[################### ] | 48% Completed | 6.94 s
[################### ] | 48% Completed | 7.04 s
[################### ] | 48% Completed | 7.14 s
[################### ] | 48% Completed | 7.24 s
[################### ] | 48% Completed | 7.34 s
[################### ] | 48% Completed | 7.44 s
[################### ] | 48% Completed | 7.54 s
[################### ] | 48% Completed | 7.64 s
[#################### ] | 52% Completed | 7.74 s
[#################### ] | 52% Completed | 7.84 s
[#################### ] | 52% Completed | 7.94 s
[#################### ] | 52% Completed | 8.04 s
[#################### ] | 52% Completed | 8.14 s
[###################### ] | 56% Completed | 8.24 s
[###################### ] | 56% Completed | 8.34 s
[###################### ] | 56% Completed | 8.44 s
[###################### ] | 56% Completed | 8.54 s
[###################### ] | 56% Completed | 8.64 s
[###################### ] | 56% Completed | 8.74 s
[###################### ] | 56% Completed | 8.84 s
[######################## ] | 60% Completed | 8.94 s
[######################## ] | 60% Completed | 9.04 s
[######################## ] | 60% Completed | 9.14 s
[######################## ] | 60% Completed | 9.24 s
[######################## ] | 60% Completed | 9.34 s
[######################## ] | 60% Completed | 9.45 s
[######################### ] | 64% Completed | 9.55 s
[######################### ] | 64% Completed | 9.65 s
[######################### ] | 64% Completed | 9.75 s
[######################### ] | 64% Completed | 9.85 s
[######################### ] | 64% Completed | 9.95 s
[######################### ] | 64% Completed | 10.05 s
[######################### ] | 64% Completed | 10.15 s
[######################### ] | 64% Completed | 10.25 s
[######################### ] | 64% Completed | 10.35 s
[########################### ] | 68% Completed | 10.45 s
[########################### ] | 68% Completed | 10.55 s
[########################### ] | 68% Completed | 10.65 s
[########################### ] | 68% Completed | 10.75 s
[########################### ] | 68% Completed | 10.85 s
[############################ ] | 72% Completed | 10.95 s
[############################ ] | 72% Completed | 11.05 s
[############################ ] | 72% Completed | 11.15 s
[############################ ] | 72% Completed | 11.25 s
[############################ ] | 72% Completed | 11.35 s
[############################ ] | 72% Completed | 11.46 s
[############################ ] | 72% Completed | 11.56 s
[############################ ] | 72% Completed | 11.66 s
[############################ ] | 72% Completed | 11.76 s
[############################## ] | 76% Completed | 11.86 s
[############################## ] | 76% Completed | 11.96 s
[################################ ] | 80% Completed | 12.06 s
[################################ ] | 80% Completed | 12.16 s
[################################ ] | 80% Completed | 12.26 s
[################################ ] | 80% Completed | 12.36 s
[################################ ] | 80% Completed | 12.46 s
[################################ ] | 80% Completed | 12.56 s
[################################ ] | 80% Completed | 12.66 s
[################################ ] | 80% Completed | 12.76 s
[################################ ] | 80% Completed | 12.86 s
[################################ ] | 80% Completed | 12.96 s
[################################# ] | 84% Completed | 13.06 s
[################################# ] | 84% Completed | 13.16 s
[################################# ] | 84% Completed | 13.26 s
[################################### ] | 88% Completed | 13.36 s
[################################### ] | 88% Completed | 13.47 s
[################################### ] | 88% Completed | 13.57 s
[################################### ] | 88% Completed | 13.67 s
[################################### ] | 88% Completed | 13.77 s
[#################################### ] | 92% Completed | 13.87 s
[#################################### ] | 92% Completed | 13.97 s
[#################################### ] | 92% Completed | 14.07 s
[###################################### ] | 96% Completed | 14.17 s
[###################################### ] | 96% Completed | 14.27 s
[########################################] | 100% Completed | 14.37 s
[ ] | 0% Completed | 141.94 us
[########################################] | 100% Completed | 100.43 ms
[ ] | 0% Completed | 150.20 us
[ ] | 0% Completed | 100.43 ms
[ ] | 0% Completed | 200.81 ms
[ ] | 0% Completed | 301.22 ms
[ ] | 0% Completed | 401.62 ms
[ ] | 0% Completed | 502.03 ms
[ ] | 0% Completed | 602.45 ms
[ ] | 0% Completed | 731.81 ms
[########################################] | 100% Completed | 832.17 ms
vect = clustered.map_vectors(
pxm.utils.vectors.column_mean,
columns=[0, 1],
label_index=-1,
dtype=float,
shape=(2,),
)
plt.figure()
plt.scatter(vect[:, 1], vect[:, 0])
/home/docs/checkouts/readthedocs.org/user_builds/pyxem/envs/latest/lib/python3.10/site-packages/numpy/core/fromnumeric.py:3504: RuntimeWarning: Mean of empty slice.
return _methods._mean(a, axis=axis, dtype=dtype,
/home/docs/checkouts/readthedocs.org/user_builds/pyxem/envs/latest/lib/python3.10/site-packages/numpy/core/_methods.py:121: RuntimeWarning: invalid value encountered in divide
ret = um.true_divide(
<matplotlib.collections.PathCollection object at 0x7f5fe81e8040>
clusterer = DBSCAN(min_samples=2, eps=20)
clustered2 = clustered.cluster_labeled_vectors(method=clusterer)
m, p = clustered2.to_markers(s, alpha=0.8, get_polygons=True)
# This clustering is decent. It shows that there might be some small tilt boundaries in the data
# which segment some of the nano-crystals into different clusters. It also shows the effect of using
# a phosphor screen which has some pretty severe after glow. This results in a smearing of the
# features and elongated clusters along the scan direction.
s.plot()
s.add_marker(m)
s.add_marker(p, plot_on_signal=False)
7 : Clusters Found!
Total running time of the script: (0 minutes 43.302 seconds)