{
  "filename": "plot_3.png",
  "iteration": 2,
  "description": "Comprehensive 3-panel figure: pLDDT profile, active site geometry comparison, and evidence convergence",
  "timestamp": "2026-07-01 07:09:35",
  "code": "\nimport matplotlib\nmatplotlib.use('Agg')\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nfig, axes = plt.subplots(1, 3, figsize=(16, 5.5))\n\n# Panel 1: pLDDT profile across the full Drosophila Echs1 sequence\nax1 = axes[0]\n\n# Re-parse pLDDT data\nimport requests\npdb_url = \"https://alphafold.ebi.ac.uk/files/AF-Q7JR58-F1-model_v6.pdb\"\npdb_resp = requests.get(pdb_url)\npdb_text = pdb_resp.text\n\nplddt_data = {}\nfor line in pdb_text.split('\\n'):\n    if line.startswith('ATOM') and line[12:16].strip() == 'CA':\n        res_num = int(line[22:26].strip())\n        bfactor = float(line[60:66].strip())\n        plddt_data[res_num] = bfactor\n\npositions = sorted(plddt_data.keys())\nplddts = [plddt_data[p] for p in positions]\n\n# Color by confidence\ncolors = []\nfor p in plddts:\n    if p > 90: colors.append('#0053d6')      # very high\n    elif p > 70: colors.append('#65cbf3')     # confident  \n    elif p > 50: colors.append('#ffdb13')     # low\n    else: colors.append('#ff7d45')            # very low\n\nax1.bar(positions, plddts, color=colors, width=1.0, edgecolor='none')\n\n# Highlight catalytic residues\nfor rpos, label in [(149, 'E149\\n(cat.)'), (169, 'E169\\n(cat.)')]:\n    ax1.axvline(x=rpos, color='red', linewidth=1.5, linestyle='--', alpha=0.7)\n    ax1.annotate(label, xy=(rpos, plddt_data[rpos]), \n                xytext=(rpos+8, plddt_data[rpos]-8),\n                fontsize=8, fontweight='bold', color='red',\n                arrowprops=dict(arrowstyle='->', color='red', lw=1))\n\n# Highlight active site motif\nax1.axvspan(146, 160, alpha=0.15, color='green', label='Active site motif')\n\nax1.set_xlabel('Residue Position', fontsize=10)\nax1.set_ylabel('pLDDT Score', fontsize=10)\nax1.set_title('AlphaFold Confidence (Q7JR58)', fontsize=11, fontweight='bold')\nax1.set_ylim(0, 105)\nax1.axhline(y=90, color='gray', linestyle=':', alpha=0.5)\nax1.axhline(y=70, color='gray', linestyle=':', alpha=0.5)\nax1.legend(fontsize=8, loc='lower right')\n\n# Panel 2: Active site distance comparison across species\nax2 = axes[1]\nspecies = ['Rat ECH\\n(PDB 1DUB)', 'Human ECHS1\\n(AlphaFold)', 'Drosophila Echs1\\n(AlphaFold)']\ncd_cd_dists = [5.22, 5.37, 5.48]\nbar_colors = ['#4a90d9', '#4a90d9', '#e8524a']\n\nbars = ax2.bar(species, cd_cd_dists, color=bar_colors, edgecolor='#333333', linewidth=0.8, width=0.6)\nfor bar, val in zip(bars, cd_cd_dists):\n    ax2.text(bar.get_x() + bar.get_width()/2, val + 0.05, f'{val:.2f} \u00c5', \n             ha='center', va='bottom', fontsize=11, fontweight='bold')\n\nax2.set_ylabel('Glu-Glu CD-CD Distance (\u00c5)', fontsize=10)\nax2.set_title('Catalytic Glutamate Geometry', fontsize=11, fontweight='bold')\nax2.set_ylim(0, 7)\nax2.axhspan(4.5, 6.0, alpha=0.1, color='green', label='Expected range')\nax2.legend(fontsize=8)\n\n# Panel 3: Evidence convergence summary\nax3 = axes[2]\nevidence_categories = [\n    'Sequence\\nIdentity',\n    'Catalytic\\nResidues',\n    'Active Site\\nMotif',\n    '3D Geometry\\n(AlphaFold)',\n    'Domain\\nArchitecture',\n    'Cross-species\\nRescue',\n    'Metabolic\\nPhenotype',\n    'PANTHER\\nClassification'\n]\nscores = [3, 5, 5, 5, 5, 4.5, 4, 5]\n\n# Create radar-like bar chart\ny_pos = np.arange(len(evidence_categories))\nbar_colors_3 = ['#2d8a4e' if s >= 4.5 else '#6db56d' if s >= 3.5 else '#a8d4a8' for s in scores]\n\nbars3 = ax3.barh(y_pos, scores, color=bar_colors_3, edgecolor='#333333', linewidth=0.5)\nax3.set_yticks(y_pos)\nax3.set_yticklabels(evidence_categories, fontsize=8)\nax3.set_xlabel('Support Score (1-5)', fontsize=10)\nax3.set_title('Evidence Convergence\\nfor GO:0004300', fontsize=11, fontweight='bold')\nax3.set_xlim(0, 5.8)\n\nfor bar, val in zip(bars3, scores):\n    ax3.text(val + 0.08, bar.get_y() + bar.get_height()/2, f'{val}', \n             va='center', fontsize=9, fontweight='bold')\n\nplt.tight_layout()\nplt.savefig('comprehensive_evidence.png', dpi=150, bbox_inches='tight')\nplt.show()\nprint(\"Figure saved: comprehensive_evidence.png\")\n",
  "plot_number": 3
}