Spectres d’absorption avec couleurs (Python)

Où l’on trace des spectres fictifs, avec la correspondance couleur-longueur d’onde

À l’occasion d’un exercice, on peut avoir besoin de créer de toutes pièces un spectre d’absorption.

Avec ce code Python, il est facile de le modifier à sa convenance.

Chaque pic est obtenu par une fonction du type ‘gaussienne’ :

 A\cdot \exp(-a\cdot (x-x_0)^2)

où A est l’absorbance maximale du pic, x0 est la longueur d’onde en nm, et a un facteur ajustant la largeur du pic.

#Trace un spectre d'absorption fictif, avec un ou deux pics
#les pics sont obtenus par des courbes gaussiennes (exp(-a(x)²)

import matplotlib.pyplot as plt
import numpy as np

lambdamin=350
lambdamax=750
LO=np.arange(lambdamin, lambdamax, 1)

#paramètres du graphique
fig=plt.figure(figsize=(7, 7))

plt.title("Spectres d'absorption")
plt.xlabel("longueur d'onde (nm)")
plt.ylabel("absorbance")
plt.xlim(lambdamin, lambdamax)

#Paramètres pour le colormap :
cmap=plt.get_cmap('turbo')#dégradé du bleu au rouge
#Attention, le colormap 'turbo' n'est pas inclus dans les installations
#matplotlib antérieures à la version 3.3.0

#Tracé du dégradé arc-en-ciel : 2 options
#Option 1 : dégradé en fond de graphique :
#for L in LO:
#    plt.axvline(L, color=cmap((L-350)/(750-350)), linewidth='20', alpha=0.1)
#Ajuster le 'alpha' pour l'intensité de la couleur
#Option 2 : dégradé à la base du graphique :
for L in LO:
    plt.vlines(L, ymin = -0.1, ymax = 0.0, color=cmap((L-350)/(750-350)))

"""
l'opération (L-350)/(750-350) fait en sorte que la 1e couleur du colormap (bleu-violet)
soit attribuée à la valeur 350 nm et la dernière (rouge) à 750 nm.
"""
#Tracé des courbes :
#un pic à 565 nm avec Amax=0.5 et un pic à 650 nm avec Amax=1.5 :
A1=0.5*np.exp(-0.0006*(LO-565)**2)+1.5*np.exp(-0.0005*(LO-650)**2)
plt.plot(LO, A1, 'k', label='colorant 1')

A2=0.0*np.exp(-0.001*(LO-420)**2)+1.0*np.exp(-0.0002*(LO-500)**2)
plt.plot(LO, A2, '--k', label='colorant 2')
"""
Les facteurs 0.001 dans les exp() règlent la largeur des pics
"""
plt.legend()
fig.savefig("spectresABSFictifs.png", dpi=200)
plt.show()

Avec le colormap ‘turbo’, on fait apparaître le dégradé de couleurs du visible, pour voir la correspondance couleur-longueur d’onde. Dans une boucle for, on trace des lignes verticales dont la couleur est en lien avec la longueur d’onde. L’opération (L-350)/(750-350) est une normalisation du colormap : elle fait en sorte que la 1e couleur du colormap (bleu-violet) soit attribuée à la valeur 350 nm et la dernière (rouge) à 750 nm.

Le dégradé à la base du graphique rend le document plus lisible. Mais on peut aussi tracer le dégradé sur tout le fond du graphique :

Le code Python :

Soyez le premier à commenter

Laisser un commentaire