Download code/plot_supp_fig2a_motif.py from nancyH/supp_tokenizer_bench: direct link, hf CLI and curl.
- Browser
- Download file 2.21 kB
-
https://huggingface.co/nancyH/supp_tokenizer_bench/resolve/main/code/plot_supp_fig2a_motif.py
- Command line
-
hf download hf://nancyH/supp_tokenizer_bench/code/plot_supp_fig2a_motif.py
-
curl -L -o plot_supp_fig2a_motif.py https://huggingface.co/nancyH/supp_tokenizer_bench/resolve/main/code/plot_supp_fig2a_motif.py
2.21 kB
| #!/usr/bin/env python3 | |
| """Supplementary Fig. 2a: perfect match rate (left) and motif fragmentation (right).""" | |
| import os | |
| import pandas as pd | |
| import matplotlib.pyplot as plt | |
| import matplotlib as mpl | |
| from matplotlib.ticker import PercentFormatter | |
| df = pd.read_csv( | |
| "results/summary_by_tokenizer.csv" | |
| ).set_index("Tokenizer") | |
| METHODS = ["DNAbert2", "Grover", "cCRE_region_BPE", "motif_region_BPE", "DNAMotifTokenizer"] | |
| LABELS = [ | |
| "BPE(orig. DNABERT-2)", | |
| "BPE(orig. Grover)", | |
| "BPE(cCRE-guided)", | |
| "BPE(motif-guided)", | |
| "DNAMotifTokenizer", | |
| ] | |
| COLORS = ["#54aa8c", "#ce7f51", "#cca47f", "#c590bd", "#e6bed6"] | |
| mpl.rcParams.update({"font.family": "sans-serif", "font.size": 13}) | |
| fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(13, 5.2)) | |
| def draw(ax, col, title, ylabel, fmt): | |
| vals = df.loc[METHODS, col].values | |
| ax.bar(range(len(vals)), vals, color=COLORS, edgecolor="#555555", linewidth=0.6, width=0.65) | |
| for i, v in enumerate(vals): | |
| ax.text(i, v + max(vals) * 0.015, fmt(v), ha="center", va="bottom", fontsize=13) | |
| ax.set_xticks(range(len(vals))) | |
| ax.set_xticklabels(LABELS, rotation=45, ha="right") | |
| ax.set_title(title, fontsize=14, pad=14) | |
| ax.set_ylabel(ylabel) | |
| ax.set_ylim(0, max(vals) * 1.12) | |
| for s in ["top", "right"]: | |
| ax.spines[s].set_visible(False) | |
| ax.spines["left"].set_color("#bbbbbb") | |
| ax.spines["bottom"].set_color("#bbbbbb") | |
| ax.grid(axis="y", color="#eeeeee", linewidth=0.8) | |
| ax.set_axisbelow(True) | |
| # Perfect match rate is a percentage | |
| draw(ax1, "Perfect_Match_Rate", "Perfect Match Rate", "", | |
| lambda v: f"{v:.2f}" if v >= 1 else f"{v:.4f}") | |
| ax1.yaxis.set_major_formatter(PercentFormatter(decimals=0)) | |
| # Fragmentation is a token count, not a percentage | |
| draw(ax2, "Avg_Tokens_Per_Motif", "Motif Fragmentation", "Avg. tokens per motif", | |
| lambda v: f"{v:.2f}") | |
| fig.text(0.01, 0.97, "a", fontsize=15, fontweight="bold", va="top") | |
| fig.tight_layout(rect=(0.02, 0, 1, 0.97), w_pad=4) | |
| out_dir = "figures" | |
| os.makedirs(out_dir, exist_ok=True) | |
| out = os.path.join(out_dir, "supp_fig2a_motif.pdf") | |
| fig.savefig(out, dpi=600) | |
| fig.savefig(out.replace(".pdf", ".png"), dpi=300) | |
| print(f"Saved: {out}") | |
| plt.close(fig) | |