RLM Stability Profile Dashboard

DrugBank database
MolPort database
Python script number 50 to build the frequency distribution graph of the RLM parameter on DrugBank molecules.
import matplotlib.pyplot as plt
from matplotlib.patches import Patch
import numpy as np
from scipy.interpolate import make_interp_spline

# 1. RLM data
x = [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]

# Frequencies in %
y = [1.74, 16.79, 11.17, 9.75, 6.23, 6.63, 5.06, 4.89, 3.88, 2.95, 3.56, 
     2.67, 3.07, 2.63, 2.87, 3.20, 3.72, 3.80, 3.48, 1.82, 0.08]

# 2. Curve smoothing (Spline)
x_smooth = np.linspace(min(x), max(x), 300)
spl = make_interp_spline(x, y, k=3)
y_smooth = spl(x_smooth)
y_smooth = [val if val > 0 else 0 for val in y_smooth] 

# 3. Define colors (RLM Traffic Light - Reverse: Left is better)
colors = []
for val in x:
    # High Stability (Low probability of instability)
    if val <= 0.3:
        colors.append('green')
    # High Instability (> 0.7) - More common in rats than humans
    elif val >= 0.7:
        colors.append('firebrick')
    # Intermediate
    else:
        colors.append('gold')

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

# A. Bars
plt.bar(x, y, width=0.04, color=colors, edgecolor='black', alpha=0.7, label='Data Frequency')

# 5. Tags and Titles
plt.xlabel('RLM Probability (0=Stable, 1=Unstable)', fontsize=12)
plt.ylabel('% Frequency', fontsize=12)
plt.title('Rat Liver Microsomal (RLM) Stability Prediction', fontsize=14)

# Axle settings
plt.xticks(np.arange(0, 1.1, 0.1))
plt.xlim(-0.05, 1.05)
plt.ylim(0, 18)

# 6. Vertical Legend (ON THE RIGHT)
legend_elements = [
    Patch(facecolor='green', edgecolor='black', alpha=0.7, label='Stable in Rat (Score < 0.3)'),
    Patch(facecolor='gold', edgecolor='black', alpha=0.7, label='Moderate / Variable (0.3 - 0.7)'),
    Patch(facecolor='firebrick', edgecolor='black', alpha=0.7, label='Unstable in Rat (Score > 0.7)')
]

plt.legend(handles=legend_elements, loc='upper right', ncol=1, framealpha=0.9)

plt.grid(axis='y', linestyle='--', alpha=0.5)
plt.tight_layout()

plt.show()