Visualize Morphospace#
Plot specimens in principal component space.
Basic PC scatter plot#
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from ktch.datasets import load_landmark_mosquito_wings
from ktch.landmark import GeneralizedProcrustesAnalysis
# Load data
data = load_landmark_mosquito_wings()
# Data is flattened: (n_specimens * n_landmarks, n_dim)
# Reshape to (n_specimens, n_landmarks * n_dim) for GPA
# Mosquito wing dataset: 127 specimens, 18 landmarks, 2D
n_specimens, n_landmarks, n_dim = 127, 18, 2
coords = data.coords.reshape(n_specimens, n_landmarks * n_dim)
# Perform GPA and PCA
gpa = GeneralizedProcrustesAnalysis()
shapes = gpa.fit_transform(coords)
pca = PCA(n_components=3)
scores = pca.fit_transform(shapes)
# Plot
fig, ax = plt.subplots(figsize=(8, 6))
scatter = ax.scatter(scores[:, 0], scores[:, 1], c=range(len(scores)), cmap='viridis', alpha=0.7)
ax.set_xlabel(f"PC1 ({pca.explained_variance_ratio_[0]:.1%})")
ax.set_ylabel(f"PC2 ({pca.explained_variance_ratio_[1]:.1%})")
ax.set_aspect('equal')
plt.colorbar(scatter, label='Specimen index')
plt.show()
Plot explained variance#
from ktch.plot import explained_variance_ratio_plot
fig, ax = plt.subplots(figsize=(8, 4))
explained_variance_ratio_plot(pca, ax=ax)
plt.show()
See also
Reconstruct Shapes for shape reconstruction
Elliptic Fourier Analysis for complete examples