... | @@ -23,21 +23,19 @@ Sur ce git, le code est plus complet, et permet de tracer : |
... | @@ -23,21 +23,19 @@ Sur ce git, le code est plus complet, et permet de tracer : |
|
|
|
|
|
Un premier contact avec la méthode **plt.imshow** ou **plt.matshow**, où on passe juste une matrice .
|
|
Un premier contact avec la méthode **plt.imshow** ou **plt.matshow**, où on passe juste une matrice .
|
|
Un bon réflexe : lire la doc !
|
|
Un bon réflexe : lire la doc !
|
|
**Axes.matshow(Z:array-like, **kwargs)**¶
|
|
**Axes.matshow(Z:array-like, kwargs)**¶
|
|
_Plot the values of a 2D matrix or array as color-coded image.
|
|
_Plot the values of a 2D matrix or array as color-coded image.
|
|
The matrix will be shown the way it would be printed, with the first row at the top. Row and column numbering is zero-based._
|
|
The matrix will be shown the way it would be printed, with the first row at the top. Row and column numbering is zero-based._
|
|
|
|
|
|
**Axes.imshow(Z:= array-like or PIL image, **kwargs)** ¶
|
|
**Axes.imshow(Z:= array-like or PIL image, kwargs)** ¶
|
|
_Display data as an image, i.e., on a 2D regular raster. The input may either be actual RGB(A) data, or 2D scalar data_
|
|
_Display data as an image, i.e., on a 2D regular raster. The input may either be actual RGB(A) data, or 2D scalar data_
|
|
|
|
|
|
|
|
**Axes.spy(Z:= array-like , kwargs)** ¶
|
|
|
|
_Plot the sparsity pattern of a 2D array.
|
|
|
|
This visualizes the non-zero values of the array._
|
|
|
|
|
|
| méthode `matshow `en spécifiant uniquement la matrice ; à la deuxième étape 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) |
|
|
|
|
_L'exemple mis en ligne dans le REPL utilise en entrée une matrice 5x5 codée en dur. D'abord on appelle seulement plt.matshow(matrice), puis on va ajouter progressivement des arguments ou objets supplémentaires._
|
|
|
|
|
|
|
|
_une matrice, par défaut, est tracée selon une grille avec la première valeur dans la case en haut à gauche. On peut spécifier les coordonnées des coins, mais alors l'axe des y prend sa valeur 0 en bas. La carte reste cependant orientée de la même marnière. Pour bien montrer le changement de repère, on a placé un rectangle identique, et on voit qu'il n'a pas le même emplacement dans les 2 repères_
|
|
|
|
|
|
|
|
|
|
_L'exemple mis en ligne dans le REPL utilise en entrée une matrice 5x5 codée en dur. D'abord on appelle seulement plt.matshow(matrice), puis on va ajouter progressivement des arguments ou objets supplémentaires._
|
|
```python
|
|
```python
|
|
from matplotlib import pyplot as plt
|
|
from matplotlib import pyplot as plt
|
|
# méthode matshow en spécifiant uniquement la matrice
|
|
# méthode matshow en spécifiant uniquement la matrice
|
... | @@ -45,15 +43,19 @@ plt.matshow([[1, 2, 30, 50, 120], [21, 2, 50, 50, 90], [-1, 2, -30, 50, -120], [ |
... | @@ -45,15 +43,19 @@ plt.matshow([[1, 2, 30, 50, 120], [21, 2, 50, 50, 90], [-1, 2, -30, 50, -120], [ |
|
|
|
|
|
plt.show()
|
|
plt.show()
|
|
```
|
|
```
|
|
|
|
Quelques remarques suite à la première figure générée :
|
|
|
|
|
|
Quelques remarques :
|
|
* Une matrice, par défaut, est tracée par matshow() selon une grille avec la première valeur dans la case _en haut à gauche_. Les cases représentant un élément de la matrice sont _centrées sur les points de grille_. => on préfèrerait 1 carré = 1 pixel : étape 2
|
|
|
|
* 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) |
|
|
|
|
|
|
* valeurs centrées sur les points de la grille => on préfèrerait 1 carré = 1 pixel
|
|
|
|
* voir l'échelle colorimétrique ?
|
|
|
|
* comment customiser l’échelle ?
|
|
|
|
* changer l’échelle pour des coordonnées géoréférencées ? (par ex. Lambert)
|
|
|
|
|
|
|
|
On va d'abord s'occuper de l'échelle colorimétrique. 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.
|
|
**Etape 2 **: on va ajouter une légende colorimétrique, sans préciser ses propriétés. 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
|
|
```python
|
|
from matplotlib import pyplot as plt
|
|
from matplotlib import pyplot as plt
|
... | @@ -74,8 +76,8 @@ cbar.set_label('colorbar par défaut ' ) |
... | @@ -74,8 +76,8 @@ cbar.set_label('colorbar par défaut ' ) |
|
plt.tick_params(labeltop=False, labelbottom=True)
|
|
plt.tick_params(labeltop=False, labelbottom=True)
|
|
fig.show()
|
|
fig.show()
|
|
```
|
|
```
|
|
|
|
|
|
Ensuite, on utilise tout simplement l'argument _extent_ pour définir des coordonnées
|
|
**Etape 3 **: On spécifie les coordonnées des coins grâce à l'argument _extent_. La carte reste visuellement identique mais le repère a changé : les cases coïncident alors avec les mailles de la grille, et l'axe des y prend alors la valeur 0 en bas . Pour bien montrer le changement de repère, on a placé un rectangle défini de la même manière qui n'a pas le même emplacement dans les 2 repères.
|
|
|
|
|
|
```python
|
|
```python
|
|
fig = plt.figure("D'une matrice à une carte de champ")
|
|
fig = plt.figure("D'une matrice à une carte de champ")
|
... | @@ -93,15 +95,15 @@ plt.tick_params(labeltop=False, labelbottom=True) |
... | @@ -93,15 +95,15 @@ plt.tick_params(labeltop=False, labelbottom=True) |
|
fig.show()
|
|
fig.show()
|
|
```
|
|
```
|
|
|
|
|
|
### Personnaliser l'échelle colorimétrique
|
|
**Etape 4 **: personnaliser l'échelle colorimétrique et la légende correspondante
|
|
|
|
On peut personnaliser le code couleur, en imposant les couleurs et les limites de classe, et la légende, en formatant les valeurs ou en ajoutant un titre par exemple.
|
|
|
|
|
|
| 4) on peut définir une colormap par une liste de couleurs, et spécifier des limites de classe ; notez les classes pour "-200 et moins" ou "500 et plus" | 5) quand c'est préférable, on peut partir d'une échelle colorimétrique continue que l'on va découper en N classes. Il reste possible de la modifier couleur par couleur. |
|
|
| 4) on peut définir une colormap par une liste de couleurs, et spécifier des limites de classe ; notez les classes pour "-200 et moins" ou "500 et plus" | 5) quand c'est préférable, on peut partir d'une échelle colorimétrique continue que l'on va découper en N classes. Il reste possible de la modifier couleur par couleur. |
|
|
|----------------------------------------------------------------------------------|----------------------------------------------------------------------------------|
|
|
|----------------------------------------------------------------------------------|----------------------------------------------------------------------------------|
|
|
| ![Cartes_Replit_4](uploads/d34b473b6d3dc4b6e991bc66b9e6a79e/Cartes_Replit_4.PNG) | ![Cartes_Replit_5](uploads/a869b3360c738f4bd1927d213b767689/Cartes_Replit_5.PNG) |
|
|
| ![Cartes_Replit_4](uploads/d34b473b6d3dc4b6e991bc66b9e6a79e/Cartes_Replit_4.PNG) | ![Cartes_Replit_5](uploads/a869b3360c738f4bd1927d213b767689/Cartes_Replit_5.PNG) |
|
|
|
|
|
|
On peut personnaliser la barre de couleurs, en imposant les couleurs et les limites de classe, et en ajoutant un titre par exemple.
|
|
|
|
|
|
|
|
Dans un premier temps, on va passer une liste de couleurs définies par l'utilisateur, instance de la classe ListedColorMaps. Je choisis aussi les limites de classe avec bounds.
|
|
Dans un premier temps, on va passer une liste de couleurs 'nommées' définies par l'utilisateur (exemple de noms simples : 'red', 'blue', 'orange'), instance de la classe ListedColorMaps. Les limites de classe sont définies avec bounds.
|
|
|
|
|
|
```python
|
|
```python
|
|
from matplotlib.colors import ListedColormap as mpl_colors_ListedColormap
|
|
from matplotlib.colors import ListedColormap as mpl_colors_ListedColormap
|
... | | ... | |