Pairwise Combination Recall Under a Fixed Top-50 Budget
Figure 7 shows the effect of combining prediction tools on recall. Recall of true off-target sites is measured among the top 50 ranked candidates after combining pairs of prediction tools using Reciprocal Rank Fusion. The analysis is restricted to full-length off-target sites without bulges to allow inclusion of ML-based models.
Input
The heatmap uses the no-bulge mixed standard-plus-ML benchmark output:
The matrix follows the manuscript display order used for the mixed no-bulge comparison. Each cell is the macro recall for the top 50 fused candidates for that pair.
Render the Figure
Code
fig, ax = plt.subplots(figsize=(10.8, 9.2))im = ax.imshow(matrix.to_numpy(dtype=float), cmap="viridis", vmin=0.0, vmax=0.8)ax.set_xticks(np.arange(len(TOOL_ORDER)))ax.set_yticks(np.arange(len(TOOL_ORDER)))ax.set_xticklabels([TOOL_LABELS.get(tool, tool) for tool in TOOL_ORDER], rotation=45, ha="right")ax.set_yticklabels([TOOL_LABELS.get(tool, tool) for tool in TOOL_ORDER])ax.set_title("Figure 7. Pairwise RRF recall among top 50 no-bulge candidates", loc="left", fontweight="bold", pad=14)ax.set_xlabel("Tool B")ax.set_ylabel("Tool A")ax.set_xticks(np.arange(-0.5, len(TOOL_ORDER), 1), minor=True)ax.set_yticks(np.arange(-0.5, len(TOOL_ORDER), 1), minor=True)ax.grid(which="minor", color="white", linewidth=0.7)ax.tick_params(which="minor", bottom=False, left=False)arr = matrix.to_numpy(dtype=float)for i inrange(arr.shape[0]):for j inrange(arr.shape[1]): value = arr[i, j]if np.isfinite(value): ax.text(j, i, f"{value:.2f}", ha="center", va="center", fontsize=6.5, color="white"if value >=0.55else"black")cbar = fig.colorbar(im, ax=ax, fraction=0.046, pad=0.04)cbar.set_label("Macro recall at k=50 after RRF")fig.tight_layout()fig.savefig(figure_dir /"figure_7_rrf_pairwise_recall_top50_no_bulge_ml.pdf", dpi=300, bbox_inches="tight")fig.savefig(figure_dir /"figure_7_rrf_pairwise_recall_top50_no_bulge_ml.png", dpi=300, bbox_inches="tight")plt.close(fig)