À la Société astronomique de France (SAF), la Commission des cadrans solaires tient un inventaire des cadrans solaires français (et de cadrans à l’étranger).
Cette carte s’appuie sur les données par département de l’inventaire tenu par Serge Grégori.
Ici ne figurent que les départements (métropole et outremer). Il existe aussi des cadrans solaires recensés à Saint-Martin et en Polynésie française.
Cette carte sera mise à jour en fonction de l’inventaire annuel de la SAF. Chaque année des cadrans solaires disparaissent (volent, destruction du bâtiment qui les porte…), des cadrans anciens sont découverts, restaurés ; enfin des cadranier.es amateurs.trices ou professionnel.le.s en créent de nouveaux.
J’ai produit cette carte choroplèthe avec un script Python et le module Geopandas de cartographie.
Le script Python et les fichiers annexes nécessaires (23,1 Mo):
Ajout 29 sept. 2024 : cadrans solaires français en nuage de points
Chaque cadran solaire référencé est représenté par un point à l’emplacement de sa commune. Les points sont translucides ; ainsi un point plus sombre désigne une commune possédant plusieurs cadrans solaires.
Chaque point désigne une commune où est référencé au moins un cadran solaire. La couleur du point varie du orange clair au marron, selon le nombre de cadrans solaires répertoriés dans la commune.
Étapes de la conception de cette carte
À partir de l’inventaire de la SAF (commission des cadrans solaires), j’ai établi un tableau comprenant une ligne pour chaque cadran, avec le nom de sa commune.
Avec l’outil fourni par data.gouv.fr, j’obtiens un fichier csv comportant les coordonnées géographiques de la commune, pour chaque cadran. Sans cet outil, un tel projet aurait été plus difficile ; cependant certaines coordonnées sont erronées.
La carte a été générée par un script Python, et notamment le module cartographique Geopandas. Il a fallu sélectionner les lieux de France métropolitaine, et créer une variable séparée pour les cadrans de région parisienne.
À ce stade on obtient un nuage de points assez satisfaisant, et en apparence proche du résultat final. Mais le diable se cache dans les détails… Les fluctuations de densité des points rend bien compte des variations locales, à une échelle inférieure à celle du département, mais une commune comportant plusieurs dizaines de cadrans est représentée comme celle qui n’en a qu’un. La solution d’appliquer une transparence aux points ne convient pas. Il faut donc un colormap pour traduire en intensité de couleur le nombre de cadrans de la commune.
Ceci nécessite de modifier le tableau initial (appelé ‘comm‘), qui comportait une ligne par cadran (et donc parfois plusieurs lignes pour une même commune), afin d’obtenir un tableau comportant une ligne par commune, avec le nombre de cadrans par commune. On obtient ceci avec :
counts = comm[['commune', 'dep']].value_counts(sort=False)
qui compte le nombre de lignes ayant à la fois la même commune et le même département. La variable counts contient :
commune dep
Acy-En-Multien Oise 1
Saint-Aubin Côte-D'Or 2
Savigny-Lès-Beaune Côte-D'Or 2
Abbaretz Loire-Atlantique 1
Abbecourt Oise 4
..
Ézanville Val-D'Oise 1
Île-De-Batz Finistère 5
Île-De-Sein Finistère 1
Île-Molène Finistère 2
Île-Tudy Finistère 5
Name: count, Length: 10938, dtype: int64
La ligne
comm = comm.sort_values(by=['commune', 'dep'])
classe les lignes par ordre alphabétique de commune et de département. On peut maintenant supprimer les lignes redondantes correspondant à la même commune, avec :
comm = comm.drop_duplicates()
Le tableau comm ne comporte plus que 10920 lignes au lieu de plus de 31000.
On ajoute ensuite à comm une nouvelle colonne donnant le nombre de cadrans par commune :
comm['nombre'] = counts.values
Cette attribution affecte bien une commune à son nombre de cadrans, parce que le tableau ‘comm’ est classé alphabétiquement de la même manière que la variable counts.
Le colormap Wistia présente une gamme du orange clair au marron, en passant par un orange foncé. On affecte les couleurs initiale et final aux valeurs limites du nombre de cadran par commune en normalisant le colormap :
norm = mpl.colors.Normalize(vmin=min(counts),vmax=max(counts))
Pour l’affichage des points, il y a une dernière contrainte importante, due au fait que les points se recouvrent les uns les autres. Si un point clair recouvre un point sombre, on perd l’information importante d’une commune comportant de nombreux cadrans solaires. Je décide que les points les plus sombres recouvrent systématiquement les points les plus clairs ; il suffit de reclasser le tableau comm, non plus par nom de commune mais pas nombre de cadrans croissant :
comm = comm.sort_values(by='nombre')
Histogramme des 5 premières communes
J’ai voulu placer les communes arrivant en tête, ce qui permet d’identifier les points les plus sombres de la carte. Initialement, les cadrans parisiens sont placé selon les arrondissements, et dans le département Paris. Il faut donc faire quelques opérations pour rassembler les cadrans parisiens (après affichage des points).
tot_paris = comm.loc[comm.dep == 'Paris'].nombre.sum()
contient le total des cadrans parisiens. Ensuite, je fais un nouveau tableau uniquement avec la ville de Paris, puis je le fusionne avec le tableau comm :
paris = pd.DataFrame({'commune': ['Paris'],
'nombre': [tot_paris]})
comm = pd.concat([comm, paris]) # fusion entre les deux tableaux
Enfin je sélectionne les lignes de comm des 5 communes les plus dotées :
podium = comm.sort_values('nombre', ascending=False)[:5]
Ce tableau contient :
dep commune latitude longitude nombre
0 NaN Paris NaN NaN 266
1617 Hautes-Alpes Briançon 44.895517 6.634829 122
21879 Pyrénées-Orientales Perpignan 42.695769 2.888513 112
3281 Alpes-Maritimes Nice 43.674468 7.196837 91
9541 Corrèze Ussel 45.554238 2.314010 83
Merci beaucoup pour votre commentaire.
Contrairement à mes habitudes, je n’ai pas partagé ce script, parce que les données ne sont pas libres de droit, malheureusement.
Cordialement.
Bonjour,
La nouvelle répartition des cadrans solaires sous forme de points est magnifique (publication du 29 septembre 2024). Merci beaucoup pour les explications concernant les étapes de la conception de la carte. Mais je n’arrive pas à trouver le script associé. Est-il disponible ? Encore bravo pour vos réalisations de très grande qualité.
Bien cordialement
Bonjour,
Serait-il possible d’obtenir le script ?
Encore merci pour ce travail remarquable.
Bien cordialement