Endocrine Disruption: Aromatase Interaction Dashboard

DrugBank database
MolPort database
Python script number 90 to build the frequency distribution graph of the Aromatase 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 (Aromatase Endocrine Disruption)
bins_aro = 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_aro = np.array([26.71, 19.02, 10.23, 7.09, 4.46, 4.25, 4.16, 3.10, 2.46, 2.00, 2.00, 1.95, 2.04, 2.00, 2.29, 2.21, 2.76, 1.27, 0.0, 0.0, 0.0])

# 2. Statistical Calculations
mean_val = np.average(bins_aro, weights=freq_aro)

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

# 3. Color Function (Aromatase Probability Traffic Light)
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_aro)
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_aro, freq_aro, width=0.04, color=face_colors, edgecolor=edge_colors, linewidth=1.5, zorder=2)

# 5. Tags and Titles
plt.xlabel('Aromatase Interaction Probability (EDC Potential)', fontsize=12)
plt.ylabel('% Frequency', fontsize=12)
plt.title('Endocrine Disruption: Aromatase Interaction', fontsize=14)

# 6. Structured Legend
legend_elements = [
    Patch(facecolor=mcolors.to_rgba('#008000', 0.6), edgecolor='#008000', label='Non-Interactor (< 0.4)'),
    Patch(facecolor=mcolors.to_rgba('#FFD700', 0.6), edgecolor='#FFD700', label='Weak/Moderate Interaction (0.4 - 0.7)'),
    Patch(facecolor=mcolors.to_rgba('#B22222', 0.6), edgecolor='#B22222', label='Strong Aromatase Disruptor (> 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, 30)
plt.tight_layout()

plt.show()