Organelle Toxicity: Mitochondrial Membrane Potential (MMP) Dashboard

DrugBank database
MolPort database
Python script number 97 to build the frequency distribution graph of the MMP 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 (Mitochondrial Membrane Potential - MMP)
bins_mmp = 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_mmp = np.array([35.12, 16.52, 8.03, 5.69, 3.44, 3.14, 2.97, 1.83, 1.87, 1.83, 2.04, 2.17, 1.49, 1.78, 2.12, 1.70, 2.63, 2.17, 2.12, 0.93, 0.42])

# 2. Statistical Calculations
mean_val = np.average(bins_mmp, weights=freq_mmp)

# PCHIP interpolation
interpolator = PchipInterpolator(bins_mmp, freq_mmp)
x_fit = np.linspace(0, 1.0, 500)
y_fit = interpolator(x_fit)
y_fit = np.clip(y_fit, 0, None)

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

# 5. Tags and Titles
plt.xlabel('Probability of MMP Disruption (Mitochondrial Toxicity)', fontsize=12)
plt.ylabel('% Frequency', fontsize=12)
plt.title('Organelle Toxicity: Mitochondrial Membrane Potential (MMP)', fontsize=14)

# 6. Structured Legend
legend_elements = [
    Patch(facecolor=mcolors.to_rgba('#008000', 0.6), edgecolor='#008000', label='Mitochondrially Inert (< 0.4)'),
    Patch(facecolor=mcolors.to_rgba('#FFD700', 0.6), edgecolor='#FFD700', label='Mild Depolarization Risk (0.4 - 0.7)'),
    Patch(facecolor=mcolors.to_rgba('#B22222', 0.6), edgecolor='#B22222', label='High MMP Disruption 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()