Endocrine Specificity: ER-LBD Interaction Dashboard

DrugBank database
MolPort database
Python script number 89 to build the frequency distribution graph of the ER_LBD parameter on DrugBank molecules.
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
from matplotlib.patches import Patch
import numpy as np
from scipy.interpolate import PchipInterpolator

# 1. Original Data (ER Ligand Binding Domain - DrugBank)
bins_er_lbd = np.array([0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0])
freq_er_lbd = np.array([38.85, 14.56, 7.26, 5.48, 3.01, 2.80, 2.85, 2.46, 2.63, 3.14, 2.25, 2.63, 2.12, 2.59, 1.91, 2.38, 1.06, 1.15, 0.64, 0.21, 0.0])

# 2. Statistical Calculations
mean_val = np.average(bins_er_lbd, weights=freq_er_lbd)

# PCHIP interpolation for empirical trend
interpolator = PchipInterpolator(bins_er_lbd, freq_er_lbd)
x_fit = np.linspace(0, 1.0, 500)
y_fit = interpolator(x_fit)
y_fit = np.clip(y_fit, 0, None)

# 3. Color Function
def get_colors(bins):
    return ['#008000' if b < 0.4 else '#FFD700' if b <= 0.7 else '#B22222' for b in bins]
colors_hex = get_colors(bins_er_lbd)
face_colors = [mcolors.to_rgba(c, alpha=0.60) for c in colors_hex]
edge_colors = [mcolors.to_rgba(c, alpha=0.90) for c in colors_hex]

# 4. Create the chart
plt.figure(figsize=(7, 6))

# Draw bars and empirical curve
plt.bar(bins_er_lbd, freq_er_lbd, width=0.04, color=face_colors, edgecolor=edge_colors, linewidth=1.5, zorder=2)

# 5. Tags and Titles
plt.xlabel('ER Ligand Binding Domain (LBD) Interaction Probability', fontsize=12)
plt.ylabel('% Frequency', fontsize=12)
plt.title('Endocrine Specificity: ER-LBD Interaction', fontsize=14)

# 6. Structured Legend
legend_elements = [
    Patch(facecolor=mcolors.to_rgba('#008000', 0.6), edgecolor='#008000', label='Non-Binder (< 0.4)'),
    Patch(facecolor=mcolors.to_rgba('#FFD700', 0.6), edgecolor='#FFD700', label='Weak/Off-Target Binding (0.4 - 0.7)'),
    Patch(facecolor=mcolors.to_rgba('#B22222', 0.6), edgecolor='#B22222', label='Strong LBD Binder (> 0.7)')
]
plt.legend(handles=legend_elements, loc='upper right', framealpha=0.95, fontsize=10)

plt.grid(axis='y', linestyle=':', alpha=0.7, zorder=0)
plt.xlim(-0.05, 1.05)
plt.ylim(0, 42)
plt.tight_layout()

plt.show()