SeqOptPlot.mutation_map
- SeqOptPlot.mutation_map(df_pareto, ax=None, figsize=(8, 4), front_only=True, cmap='Reds')[source]
Heatmap of substitution enrichment across the Pareto front (position x amino acid).
Each cell counts how often a given substitution (target amino acid at a 1-based position) appears among the front’s variants — the directed-evolution view of which mutations the optimization converged on.
- Parameters:
df_pareto (pd.DataFrame) – Output of
SeqOpt.run()(itsvariantlabels are parsed).ax (matplotlib.axes.Axes, optional) – Axes to draw on. A new figure is created when
None.figsize (tuple, default=(8, 4)) – Figure size when
axis None.front_only (bool, default=True) – If
True, count only the first (rank=0) front.cmap (str, default="Reds") – Matplotlib colormap name for the enrichment counts.
- Returns:
fig (matplotlib.figure.Figure) – The figure.
ax (matplotlib.axes.Axes) – The axes the heatmap was drawn on.
Examples
import numpy as np, pandas as pd import matplotlib.pyplot as plt from sklearn.ensemble import RandomForestClassifier import aaanalysis as aa aa.options["verbose"] = False df_feat = aa.load_features(name="DOM_GSEC") df_seq = aa.load_dataset(name="DOM_GSEC", n=50) labels = df_seq["label"].to_list() sf = aa.SequenceFeature() X = np.asarray(sf.feature_matrix(features=df_feat["feature"], df_parts=sf.get_df_parts(df_seq=df_seq), df_scales=aa.load_scales()), dtype=float) model = RandomForestClassifier(n_estimators=100, random_state=0).fit(X, labels) wt = df_seq[df_seq["label"] == 0].iloc[[0]].reset_index(drop=True) objectives = [("substrate", "max", "delta_pred"), ("parsimony", "min", "n_mut")] seqopt = aa.SeqOpt(mode="importance", model=model, target_class=1, random_state=42) df_pareto = seqopt.run(df_seq=wt, df_feat=df_feat, objectives=objectives, pop_size=40, n_gen=20, n_mut_max=5, region="tmd") aa.display_df(df_pareto, n_rows=10, show_shape=True)
DataFrame shape: (7, 8)
entry variant n_mut sequence_mut substrate parsimony rank crowding 1 Q14802 0 MQKVTLGLLVFLAGF...PGETPPLITPGSAQS 0.000000 0.000000 0 inf 2 Q14802 L37T+I55T+V56L+S58Q+A59R 5 MQKVTLGLLVFLAGF...PGETPPLITPGSAQS 37.000000 5.000000 0 inf 3 Q14802 L37G+A59R 2 MQKVTLGLLVFLAGF...PGETPPLITPGSAQS 29.000000 2.000000 0 0.429730 4 Q14802 A59R 1 MQKVTLGLLVFLAGF...PGETPPLITPGSAQS 16.000000 1.000000 0 0.316216 5 Q14802 L37G+V56L+A59R 3 MQKVTLGLLVFLAGF...PGETPPLITPGSAQS 33.000000 3.000000 0 0.281081 6 Q14802 A59K 1 MQKVTLGLLVFLAGF...PGETPPLITPGSAQS 16.000000 1.000000 0 0.275676 7 Q14802 L37G+V56L+S58Q+A59R 4 MQKVTLGLLVFLAGF...PGETPPLITPGSAQS 35.000000 4.000000 0 0.254054 aa.plot_settings() aa.SeqOptPlot().mutation_map(df_pareto=df_pareto, front_only=True) plt.tight_layout(); plt.show()
# cmap sets the enrichment colormap; figsize sets the figure size in inches aa.plot_settings() aa.SeqOptPlot().mutation_map(df_pareto=df_pareto, cmap="Blues", figsize=(9, 5)) plt.tight_layout(); plt.show()