Durée du jour

Où l’on illustre les variations de la durée du jour selon la date et la latitude.

La durée du jour est déterminée par deux paramètres : la date et latitude du lieu.
Sur ce document, la longueur des barres entourant la carte du globe indique la durée du jour, pour les latitudes de -90 à 90°.


Les dates choisies sont le 21 du mois, sauf s’il s’agit d’un changement de saison à un jour différent. Les dates de changements de saison correspondent à l’année 2023, mais peuvent varier d’une année sur l’autre (voir cet article, ou le site de l’IMCCE).

Exemple de lecture : le 21 avril, à la latitude 50°N, le jour dure 14 h env.
Barres jaunes : le jour dure 24 h (le Soleil ne se couche pas).
Barres manquantes : le Soleil ne se lève pas.

On remarque que :

  • à l’équateur (latitude 0°) : le jour dure 12 h toute l’année.
  • aux équinoxes de mars et de septembre : le jour dure 12 h sur toute la Terre.

Un mot sur le script Python :

Les bibliothèques utilisées :

  • matplotlib (graphiques)
  • numpy (gestion de tableaux de données)
  • datetime (gestion de dates)
  • locale (écriture des dates en français)

Les fonctions définies :

def N_JOURS(date):
    """ renvoie le rang du jour dans l'année pour une date (datetime) donnée"""
    delai = date - janvier1 + dt.timedelta(days=1)
    return delai.days
def DECLINAISON(date):
    """
    date : objet datetime
    Renvoie la déclinaison du jour en radians.
    """
    J = N_JOURS(date)
    long = (2*np.pi*(J-79))/365.2422
    decl = np.arcsin(np.sin(eps)*np.sin(long))
    return decl 
def DUREE(date, latitude):
    """
    date : objet datetime.
    latitude : latitude en degrés.
    Renvoie la durée du jour (heures), à la date et la latitude données.
    """
    if date == equinoxe_mars or date == equinoxe_sept:
        return np.ones_like(latitudes) * 12
    else :
        lat_rad = np.radians(latitude)
        decl = DECLINAISON(date)
        cosH0 = -np.tan(lat_rad) * np.tan(decl)
        cosH0 = np.where(cosH0 <-1,-1, cosH0) # suppression des valeurs <-1
        cosH0 = np.where(cosH0 > 1,1, cosH0) # suppression des valeurs > 1
        H0 = np.arccos(cosH0)
        return 2 * H0/np.radians(15)
def formatage_axe(date, ax):
    """ Formatage des axes"""
    ax.set_xlim(-np.pi/2, np.pi/2)
    ax.set_rlim(-20, R24)
    xticks = np.arange(-90,90+10,10)
    ax.set_xticks(np.radians(xticks))
    ax.tick_params(pad=-2) # ajuste l'écartement des graduations d'angle
    ax.set_ylabel('durée du jour\n (heures)',labelpad=-35,loc='bottom')
    # Grille sous le tracé :
    # ax.set_axisbelow(True)#place la grille sous les points tracés.
    ax.set_yticks(yticks, ytickslabels)
    date_str = date.strftime('%d %b')
    ax.text(0.80,1,f'{date_str}',transform=ax.transAxes,
            c='darkslategrey',ha='right',fontweight='bold',fontsize=12)
    # insérer une image :
    newax = ax.inset_axes([0.025, 0.2727, 0.454, 0.454])# insérer un axe pour accueillir l'image
    newax.axis('off')
    newax.imshow(im)

Les valeurs de déclinaison du Soleil, indispensables pour tenir compte des différentes dates, sont obtenues par une modélisation assez simple (il en existe d’autres). La déclinaison pourrait être tirée des éphémérides de l’IMCCE, pour une année donnée. Le site de l’IMCCE propose le calcul direct de la durée du jour (pour une année ou plus), mais pour une latitude donnée qu’il faut modifier à chaque nouveau calcul.

Pour les équinoxes, afin que le rendu graphique ne dépende pas de la date exacte des équinoxes pour l’année prise en exemple, les durées du jour ne sont pas calculées.

Pour les graphiques, un ensemble de 12 graphiques est créé, en lignes et colonnes. Une boucle for parcourt ces graphiques ainsi que la liste de dates définies.

Le script Python complet à télécharger (image de la Terre incluse) :


Version en GIF animé :

2 Comments

  1. David ALBERTO said:

    The image file is now included in the zip file.

    26 juin 2023
  2. yangyangstudio said:

    There is no file (orthographic_projection_r.png)

    26 juin 2023

Laisser un commentaire