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. PASTE YOUR DATA HERE (Biodegradability)
datos_crudos = """Bin Center % Frequency
0 4.62845010615711
0.05 27.5583864118896
0.1 16.0084925690021
0.15 11.5923566878981
0.2 8.28025477707006
0.25 6.32696390658174
0.3 4.45859872611465
0.35 3.73673036093418
0.4 2.76008492569002
0.45 2.25053078556263
0.5 2.08067940552017
0.55 1.6135881104034
0.6 1.44373673036093
0.65 1.44373673036093
0.7 1.99575371549894
0.75 1.52866242038217
0.8 1.01910828025478
0.85 0.636942675159236
0.9 0.424628450106157
0.95 0.212314225053079"""
# 2. AUTOMATIC PROCESSING
lineas = datos_crudos.strip().split('\n')[1:]
bins_array = []
freq_array = []
for linea in lineas:
b, f = linea.strip().split()
bins_array.append(float(b))
freq_array.append(float(f))
bins = np.array(bins_array)
freq = np.array(freq_array)
mean_val = np.average(bins, weights=freq)
interpolator = PchipInterpolator(bins, freq)
x_fit = np.linspace(min(bins), max(bins), 500)
y_fit = interpolator(x_fit)
y_fit = np.clip(y_fit, 0, None)
# Inverted Traffic Light: Low Biodegradability (<0.4) = Persistence = Danger (Red)
def get_colors(b_array):
return ['#B22222' if b < 0.4 else '#FFD700' if b <= 0.7 else '#008000' for b in b_array]
colors_hex = get_colors(bins)
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]
# 3. CREATION OF THE GRAPH
plt.figure(figsize=(7, 6))
plt.bar(bins, freq, width=0.04, color=face_colors, edgecolor=edge_colors, linewidth=1.5, zorder=2)
# 4. LABELS AND TITLES
plt.xlabel('Biodegradability Probability (BOD >= 60%)', fontsize=12)
plt.ylabel('% Frequency', fontsize=12)
plt.title('Environmental Fate: Ready Biodegradability Potential', fontsize=14)
legend_elements = [
Patch(facecolor=mcolors.to_rgba('#B22222', 0.6), edgecolor='#B22222', label='Persistent / Non-Biodegradable (< 0.4)'),
Patch(facecolor=mcolors.to_rgba('#FFD700', 0.6), edgecolor='#FFD700', label='Moderate / Borderline (0.4 - 0.7)'),
Patch(facecolor=mcolors.to_rgba('#008000', 0.6), edgecolor='#008000', label='Readily Biodegradable (> 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, max(freq) * 1.1)
plt.tight_layout()
plt.show()