... | ... | @@ -4,21 +4,20 @@ |
|
|
|
|
|
**Mots clés** : **matshow** (et **imshow**), **contour et contourf**, **geopandas**, **colormap** (discrétisation ; ListedColormap...), **colorbar**
|
|
|
|
|
|
** Fonctions évoquées pour comparaison ** : **pcolormesh**
|
|
|
\*\* Fonctions évoquées pour comparaison \*\* : **pcolormesh**
|
|
|
|
|
|
**autre modules utilisés :** **pathlib** (notamment méthode **Path.is_file**), **Shapely** pour le traitement des objets géométriques
|
|
|
|
|
|
\*\*Modules pour les cartes géoréférencées \*\* : **pyproj**, **geopandas**, (**_cartopy ?_**)
|
|
|
|
|
|
# Résumé des fonctions pour tracer des cartes selon une variable (version non exhaustive ?)
|
|
|
|
|
|
|MAILLAGE| Fonction| caractéristiques principales (vérifier la doc !) |
|
|
|
| ------ | ------ | ------ |
|
|
|
| CARRES| matshow| représenter les valeurs d'une matrice par un code couleur (heatmap)|
|
|
|
| CARRES| imshow | représenter une image, soit par un code couleur (valeurs) soit par les couleurs définies directement dans l'image|
|
|
|
| RECTANGLES| pcolormesh| représenter les valeurs d'une matrice de valeurs par un code couleur sur une grille à mailles rectangulaires|
|
|
|
| IRREGULIER| contour et contourf| interpoler les isolignes à partir des valeurs d'un semis de points ; contour représente les classes par des aplats de couleur, et contourf trace les isolignes (frontières de classe) |
|
|
|
| POLYGONES| voir geopandas| colorer les polygones des objets géopandas avec un code couleur défini par une autre colonne de la DataFrame geopandas |
|
|
|
| MAILLAGE | Fonction | caractéristiques principales (vérifier la doc !) | exemple 5x5 |
|
|
|
|----------|----------|--------------------------------------------------|-------------|
|
|
|
| CARRES | matshow | représenter les valeurs d'une matrice par un code couleur (heatmap) ---- Par défaut, l'origine (0,0) est en haut à gauche, et la valeur de la colonne 0 ligne 0 est également en haut à gauche. On peut ajuster le repère avec les arguments origin et extent | ![Cartes_Replit_2](uploads/cf23f79e6554fe32fbc2de57eceb3e89/Cartes_Replit_2.PNG) |
|
|
|
| CARRES | imshow | représenter une image, soit par un code couleur (valeurs) soit par les couleurs définies directement dans l'image | (idem) |
|
|
|
| PARALLELOGRAMMES | pcolormesh | représenter les valeurs d'une matrice de valeurs par un code couleur sur une grille à mailles rectangulaires ; on définit la grille avec un vecteur des X et un vecteur des Y (rectangles) ou une matrice des X et des Y (parallélogrammes) | ![carte_de_champ_rectangulaire__pcolormesh_](uploads/f0acc3a81d93bc0945ca9a9c435415bf/carte_de_champ_rectangulaire__pcolormesh_.png) |
|
|
|
| IRREGULIER | contour et contourf | interpoler les isolignes à partir des valeurs d'un semis de points ; contour représente les classes par des aplats de couleur, et contourf trace les isolignes (frontières de classe) | ![matrice_vers_isolignes__contourf_](uploads/0a3a241e5f5ade42542a01b4f57d5bf4/matrice_vers_isolignes__contourf_.png) |
|
|
|
| POLYGONES | voir geopandas | colorer les polygones des objets géopandas avec un code couleur défini par une autre colonne de la DataFrame geopandas | en attente |
|
|
|
|
|
|
# SOMMAIRE
|
|
|
|
... | ... | @@ -62,7 +61,8 @@ _L'exemple mis en ligne dans le REPL utilise en entrée une matrice 5x5 codée e |
|
|
```python
|
|
|
from matplotlib import pyplot as plt
|
|
|
# méthode matshow en spécifiant uniquement la matrice
|
|
|
plt.matshow([[1, 2, 30, 50, 120], [21, 2, 50, 50, 90], [-1, 2, -30, 50, -120], [41, 42, 80, 50, 50], [9, 29, 39, 590, 10]])
|
|
|
ma_matrice = [[1, 2, 30, 50, 120], [21, 2, 50, 50, 90], [-1, 2, -30, 50, -120], [41, 42, 80, 50, 50], [9, 29, 39, 590, 10]]
|
|
|
plt.matshow(ma_matrice )
|
|
|
|
|
|
plt.show()
|
|
|
```
|
... | ... | @@ -73,9 +73,8 @@ Quelques remarques suite à la première figure générée : |
|
|
* voir l'échelle colorimétrique : étape 3
|
|
|
* comment customiser l’échelle ? : étape 4
|
|
|
* comment travailler avec des données géoréférencées ? : étape 5
|
|
|
|
|
|
| deuxième étape : méthode `matshow `en spécifiant uniquement la matrice ; on a ajouté une `colorbar` | troisième étape : on envoie à matshow l'argument extent, ce qui revient à définir les coordonnées des 4 coins |
|
|
|
|------------------------------------|-------------------------------------|
|
|
|
|-----------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------|
|
|
|
| ![Cartes_Replit_2](uploads/cf23f79e6554fe32fbc2de57eceb3e89/Cartes_Replit_2.PNG) | ![](uploads/7b3cc259ebe50939fce5a65662361842/Cartes_Replit_3.PNG) |
|
|
|
|
|
|
\*\*Etape 1.b \*\*: légende colorimétrique
|
... | ... | @@ -83,23 +82,25 @@ Quelques remarques suite à la première figure générée : |
|
|
Dans un premier temps, on va demander à afficher la légende ; comme on n'a pas précisé le code couleur, donc c'est donc un paramétrage "par défaut". On en profite pour ajouter un carré orange de côté 1 dont un des sommets est en (0,0), pour matérialiser le décalage entre le pixels et la grille. Note : l'argument 'interpolate' nous permet de choisir entre cette représentation "par pixels" et une représentation lissée.
|
|
|
|
|
|
```python
|
|
|
ma_matrice = [[1, 2, 30, 50, 120], [21, 2, 50, 50, 90], [-1, 2, -30, 50, -120], [41, 42, 80, 50, 50], [9, 29, 39, 590, 10]]
|
|
|
|
|
|
from matplotlib import pyplot as plt
|
|
|
from matplotlib.patches import Rectangle
|
|
|
fig = plt.figure("D'une matrice à une carte de champ")
|
|
|
ax = fig.add_subplot(111)
|
|
|
ax.set_title("défaut : centres des pixels \n sur les points de grille")
|
|
|
# on a ajouté une colorbar sans spécifier d'arguments
|
|
|
cax = ax.matshow([[1, 2, 30, 50, 120], [21, 2, 50, 50, 90], [-1, 2, -30, 50, -120], [41, 42, 80, 50, 50], [9, 29, 39, 590, 10]])
|
|
|
cax = ax.matshow(ma_matrice)
|
|
|
# on définit un rectangle puis on l'ajoute à cax pour se repérer
|
|
|
case_en_haut_a_gauche = Rectangle((0, 0), width=1, height=1, lw=2, edgecolor='orange',
|
|
|
facecolor='None')
|
|
|
|
|
|
ax.add_patch(case_en_haut_a_gauche)
|
|
|
# on n'a rien défini nous-même pour le code couleur associé, les options par défaut seront utilisées (colormap), et ajustées aux données (valeurs min et max...).
|
|
|
#deux instructions pour définir la représentation de l'échelle colorimétrique et son titre
|
|
|
cbar = fig.colorbar(cax, ax=ax, extend='both')
|
|
|
cbar.set_label('colorbar par défaut ' )
|
|
|
plt.tick_params(labeltop=False, labelbottom=True)
|
|
|
fig.show()
|
|
|
plt.show()
|
|
|
```
|
|
|
|
|
|
# \*\*Etape 1.b \*\*: On spécifie les coordonnées des coins grâce à l'argument _extent_.
|
... | ... | @@ -277,7 +278,7 @@ Il s'agit en fait d'une grille de points régulièrement espacés dans une proje |
|
|
|
|
|
En plus de np.carte, la matrice des valeurs de dimensions NxM , on a donc définit deux autres matrices de mêmes dimensions, matrice_x et matrice_y ; chaque élément (i,j) des matrices a été obtenu en transformant le point (x_j,y_i) de la grille initiale d'un système à l'autre. On peut utiliser une colorbar par défaut ou s'en créer une. Ici, on a défini une classe Custom_cmap qui prend comme arguments nb_couleurs, nom_cmap, col_under, col_over, carre_blanc, bound. Par défaut :
|
|
|
|
|
|
```
|
|
|
```plaintext
|
|
|
nb_couleurs = 9
|
|
|
nom_cmap = "viridis_r" # colormap continue qui sera discrétisée
|
|
|
col_under = 'grey' # couleur des valeurs inférieures à la borne basse
|
... | ... | @@ -288,7 +289,7 @@ bounds_5min = [-1, 0.1, 0.5, 1, 2, 5, 10, 20, 30] # liste des limites de classe |
|
|
bounds_h = [-1, 0.1, 0.5, 1, 5, 10, 50, 100, 200]
|
|
|
```
|
|
|
|
|
|
```
|
|
|
```plaintext
|
|
|
custom_bar = Custom_cmap()
|
|
|
cax = plt.contourf(matrice_x, matrice_y, np_carte, levels=custom_bar.bounds_5min,extend='both',
|
|
|
cmap=custom_bar.cmap, norm=custom_bar.norm) # "viridis_r") #levels=Custom_cmap.nb_couleurs+2,
|
... | ... | |