.ipynb

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()
../../_images/139823d2075c53075cbeab3f9f81b363286b0aa490f763b5ac950b0ed5c11bce.png

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()
../../_images/e76d77935204e4254b0e3f765d2f0a51fad640e5ba366c12df00dd887c53ee49.png

See also