Metabolic Toxicity: Aryl Hydrocarbon Receptor (AhR) Dashboard

DrugBank database
MolPort database
Python script number 91 to build the frequency distribution graph of the AhR 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 (Aryl Hydrocarbon Receptor - AhR)
bins_ahr = 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_ahr = np.array([36.90, 21.74, 9.51, 5.90, 4.20, 3.74, 3.23, 2.04, 2.21, 1.23, 1.40, 1.32, 1.10, 0.81, 1.02, 1.23, 0.68, 0.76, 0.59, 0.38, 0.0])

# 2. Statistical Calculations
mean_val = np.average(bins_ahr, weights=freq_ahr)

# PCHIP interpolation to capture exponential decay
interpolator = PchipInterpolator(bins_ahr, freq_ahr)
x_fit = np.linspace(0, 1.0, 500)
y_fit = interpolator(x_fit)
y_fit = np.clip(y_fit, 0, None)

# 3. Color Function (AhR 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_ahr)
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_ahr, freq_ahr, width=0.04, color=face_colors, edgecolor=edge_colors, linewidth=1.5, zorder=2)

# 5. Tags and Titles
plt.xlabel('AhR Interaction Probability (Xenobiotic Sensor Potential)', fontsize=12)
plt.ylabel('% Frequency', fontsize=12)
plt.title('Metabolic Toxicity: Aryl Hydrocarbon Receptor (AhR)', fontsize=14)

# 6. Structured Legend
legend_elements = [
    Patch(facecolor=mcolors.to_rgba('#008000', 0.6), edgecolor='#008000', label='Safe / Non-Interactor (< 0.4)'),
    Patch(facecolor=mcolors.to_rgba('#FFD700', 0.6), edgecolor='#FFD700', label='Moderate Probability (0.4 - 0.7)'),
    Patch(facecolor=mcolors.to_rgba('#B22222', 0.6), edgecolor='#B22222', label='AhR Activator / High Risk (> 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, 40)
plt.tight_layout()

plt.show()