Genotoxicity & Apoptotic Trigger: p53 Pathway Dashboard

DrugBank database
MolPort database
Python script number 95 to build the frequency distribution graph of the p53 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 (p53 Activation / DNA Damage)
bins_p53 = 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_p53 = np.array([41.10, 21.49, 8.83, 5.77, 4.42, 3.01, 2.93, 1.95, 2.12, 1.87, 1.15, 1.10, 1.32, 1.27, 0.64, 0.55, 0.30, 0.13, 0.04, 0.0, 0.0])

# 2. Statistical Calculations
mean_val = np.average(bins_p53, weights=freq_p53)

# PCHIP interpolation to capture the asymmetric exponential peak
interpolator = PchipInterpolator(bins_p53, freq_p53)
x_fit = np.linspace(0, 1.0, 500)
y_fit = interpolator(x_fit)
y_fit = np.clip(y_fit, 0, None)

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

# 5. Tags and Titles
plt.xlabel('p53 Activation Probability (Cellular Stress / DNA Damage)', fontsize=12)
plt.ylabel('% Frequency', fontsize=12)
plt.title('Genotoxicity & Apoptotic Trigger: p53 Pathway', fontsize=14)

# 6. Structured Legend
legend_elements = [
    Patch(facecolor=mcolors.to_rgba('#008000', 0.6), edgecolor='#008000', label='Non-Genotoxic / Safe (< 0.4)'),
    Patch(facecolor=mcolors.to_rgba('#FFD700', 0.6), edgecolor='#FFD700', label='Moderate Stress Inducer (0.4 - 0.7)'),
    Patch(facecolor=mcolors.to_rgba('#B22222', 0.6), edgecolor='#B22222', label='High DNA Damage/Apoptosis (> 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, 45)
plt.tight_layout()

plt.show()