Acute Dermal Toxicity (ADT) Profile Dashboard

DrugBank database
MolPort database
Python script number 70 to build the frequency distribution graph of the ADT 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. Original Data (ADT)
bin_centers = [0.1, 0.15, 0.20, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50, 0.55, 0.60, 0.65, 0.70, 0.75, 0.80, 0.85, 0.90, 0.95, 1.0]
frequencies = [0.25, 0.47, 0.42, 0.55, 1.53, 1.78, 2.68, 3.65, 3.44, 5.27, 7.73, 9.13, 10.96, 13.16, 13.04, 12.06, 9.85, 3.99, 0.04]

# 2. Generate the smoothed curve (Spline)
x_smooth = np.linspace(min(bin_centers), max(bin_centers), 300)
spl = make_interp_spline(bin_centers, frequencies, k=3)
y_smooth = spl(x_smooth)
y_smooth = [val if val > 0 else 0 for val in y_smooth] 

# 3. Standard colors
colors = []
for val in bin_centers:
    if val < 0.4:
        colors.append('green')
    elif val < 0.7:
        colors.append('gold')
    else:
        colors.append('firebrick')

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

# Bars
plt.bar(bin_centers, frequencies, width=0.04, color=colors, edgecolor='black', alpha=0.6, label='Observed Data')

# 5. Tags and Titles
plt.xlabel('Probability / Score of ADT', fontsize=12)
plt.ylabel('% Frequency', fontsize=12)
plt.title('Acute dermal toxicity Distribution', fontsize=14)

# Axle settings
plt.xticks(np.arange(0.0, 1.1, 0.1))
plt.xlim(0.0, 1.05)
plt.ylim(0, 16) 

# 6. Legend
legend_elements = [
    Patch(facecolor='green', edgecolor='black', label='Low Values'),
    Patch(facecolor='gold', edgecolor='black', label='Mid Values'),
    Patch(facecolor='firebrick', edgecolor='black', label='High Values'),
]

plt.legend(handles=legend_elements, loc='upper left', framealpha=0.95, fontsize=10)

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

plt.show()