La déclinaison du Soleil est un paramètre que le gnomoniste doit souvent prendre en compte dans ses tracés de cadrans solaires.
L’IMCCE (Institut de Mécanique Céleste et de Calculs des Éphémérides) fournit gracieusement les valeurs pour une période donnée. Reste à les présenter clairement dans un tableau-calendrier.
Pour la déclinaison du Soleil, il faut choisir « Éphémérides de position ».
Choisir le Soleil, la période souhaitée (ici, 1er janvier 2023, et 365 dates calculées), coordonnées Géocentre.
Après calculs, le portail d’éphémérides de l’IMCCE propose de télécharger les données calculées dans un fichier de format .csv.
Le code suivant fait appel au module pandas de Python, un module qui lit les données contenues dans un fichier .csv. Ici, je suppose que le fichier .csv se trouve enregistré dans le même répertoire que le fichier Python.
import pandas as pd#lecture du fichier csv
import matplotlib.pyplot as plt
import datetime#Gestion des dates
from datetime import timedelta
#Données csv issues de du portail IMCCE : https://ssp.imcce.fr/forms/ephemeris
annee=2023
tableau=pd.read_csv("EphemeridesSoleilDecl"+str(annee)+".csv",
sep=';', #caractère de séparation des colonnes
skiprows=1, #ne pas lire la première ligne, car les noms des colonnes sont renommés plus loin
usecols=[0, 2],
names=['date', 'declinaison'],
parse_dates=['date'], #reconnaître la colonne date comme des dates formatées
)
Le module datetime permet de manipuler des dates et de les afficher dans un format personnalisable. Ici on a besoin de créer des dates pour le début et la fin de chaque mois, et d’afficher le n° du jour et le mois, pour chaque date.
Avec le module datetime, pour afficher les noms des jours et des mois en français, il faut ajouter en début de code les deux lignes suivantes :
import locale
locale.setlocale(locale.LC_ALL, 'fr_FR.UTF-8')#dates en français
tableau=tableau.set_index('date')#réindexer le tableau avec les dates
plt.rcParams["font.family"] = "Ubuntu"#ou autre police installée
plt.rcParams["font.size"] = 10#à adapter aux dimensions des axes
fig, axs=plt.subplots(nrows=2, ncols=6, tight_layout=True)#création d'une figure et de 12 axes (1 par mois)
#Les graphes forment une grille de 2 lignes et 6 colonnes
#on peut modifier le nombre de grilles et colonnes, pourvu que le produit fasse 12.
axs=axs.flatten()#pour accéder à chaque graphe par axs[N]
fig.set_size_inches(21/2.54, 29.7/2.54)#dimensions de la figure, en pouces,
"""
En modifiant les dimensions de la figure, il faudra peut-être ajuster :
- la taille de la police
- les limites des axes en x et en y
Et réciproquement.
"""
plt.suptitle("Déclinaison du Soleil en %s"%(annee), fontsize=17, color='royalblue')
Les dimensions de la figure sont à adapter au format de la grille des 12 axes.
Ensuite, une boucle décrit successivement les 12 mois de l’année (une première boucle for), et pour chaque mois tous les jours (2e boucle for).
for N in range(1, 12+1):#N : numéro du mois courant, de 1 à 12
ax=axs[N-1]
date_debut=datetime.datetime(annee, N, 1)
ax.set_title(date_debut.strftime("%B"), fontsize=13, c='blueviolet')#nom complet du mois
ax.set_xticks([])#suppression des graduations
ax.set_yticks([])#suppression des graduations
# ax.axis('off')#efface les cadres des axes
ax.set_ylim(-32, 0.5)#hauteur suffisante pour les listes de dates
ax.set_xlim(-0.05, 0.3)#largeur suffisante pour le texte
if N==12:
date_fin=datetime.datetime(annee+1, 1, 1) - timedelta(days=1)#mois suivant moins 1 jour
else:
date_fin=datetime.datetime(annee, N+1, 1) - timedelta(days=1)#mois suivant moins 1 jour
mois=tableau.loc[date_debut:date_fin]#filtrer le mois courant
for jour in mois.index:
Y=-float(jour.strftime('%d'))#numéro du jour, pris comme coordonnée verticale
texte1=jour.strftime("%d %b")#N° du jours et nom abrégé du mois (nom complet : %B)
texte2=str(round(float(mois.loc[jour, ['declinaison']]), 2)).replace('.', ',')#valeur de déclinaison lue
ax.text(0, Y, texte1 +" " +texte2, fontsize=8)#écriture des données
Pour trouver la date de fin du mois alors que la longueur des mois varie, je prends le 1er jour du mois suivant, auquel je retire un jour.
Fin du code :
texte="Les calculs d’éphémérides de position des corps du Système solaire ont été réalisés par le service de calcul des éphémérides de l’IMCCE à travers son portail Système solaire (https://ssp.imcce.fr)"
fig.text(0.01, 0.005, texte, fontsize=6, ha='left', va='bottom')
NomFichier="DeclinaisonSoleil_"+str(annee)
fig.savefig(NomFichier+".png", dpi=200)#création d'un fichier image PNG
fig.savefig(NomFichier+".pdf")#création d'un fichier PDF
plt.show()
Le nom du fichier est une chaîne de caractères. Je l’obtiens en concaténant plusieurs chaînes : j’ajoute l’année, puis une chaîne pour l’extension du fichier (png ou pdf).
Ce code est tel que, pour les années suivantes, il suffira de télécharger le nouveau fichier .csv, et de modifier l’année dans le début du code Python.
Soyez le premier à commenter