Ajouter une ligne diagonale (hachures) à la carte thermique (python, matplotlib)

introduction

Je voulais dessiner une ligne diagonale ('/') sur la partie montrant une valeur spécifique sur la carte thermique, alors prenez note.

Chose que tu veux faire

Dans la carte thermique suivante, je souhaite que la partie d'une valeur spécifique soit belle avec des lignes diagonales.

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

np.random.seed(0)
Z =np.random.rand(10, 10)
Zm = Z * 0
Z[3:5, 5:8] = 1
fig, ax = plt.subplots(figsize=(9, 7))
ax1 = ax.pcolormesh(Z)
fig.colorbar(ax1)

image.png

Dans la figure ci-dessus, certaines valeurs de la figure sont définies sur 1 avec «Z [3: 5, 5: 8] = 1». Tracez une ligne diagonale sur cette partie «Z [3: 5, 5: 8]».

Solution

Le code final est ci-dessous.

np.random.seed(0)
Z =np.random.rand(10, 10)
Zm = Z * 0
Z[3:5, 5:8] = 1
fig, ax = plt.subplots(figsize=(9, 7))
ax1 = ax.pcolormesh(Z)

Zm = np.ma.masked_where(Z!=1, Z)
ax2 = ax.pcolor(Zm, hatch='/', edgecolor='grey',facecolor='none', linewidth=0.0)

fig.colorbar(ax1)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167418/2a7abe1d-cb07-25f7-81e1-5ddc58bb75e1.png)

#Qu'est-ce que tu fais
Dans le code ci-dessus, les deux lignes suivantes sont différentes de la première.

``````python
Zm = np.ma.masked_where(Z!=1, Z)
ax2 = ax.pcolor(Zm, hatch='/', edgecolor='grey',facecolor='none', linewidth=0.0)
```

## Ligne 1: masque matriciel
 Afin de ne montrer qu'une partie avec des lignes diagonales, la matrice («Zm») représentant cette partie est créée dans la première ligne du code.

 En utilisant `numpy.ma.masked_where`, vous pouvez créer une matrice dans laquelle la partie correspondant à la condition est invalidée (masquée).
 Référence: [document officiel numpy.ma.masked_where](https://docs.scipy.org/doc/numpy/reference/generated/numpy.ma.masked_where.html)

 La matrice d'origine («Z») et la matrice masquée («Zm») sont les suivantes.
 <img width="616" alt="スクリーンショット 2019-12-03 13.53.23.png " src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167418/d964c787-cd0a-37c3-bbd3-bfeeb49b3b73.png ">


 <img width="616" alt="スクリーンショット 2019-12-03 13.53.33.png " src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167418/67c775c9-f2fa-a1b2-c7fa-39baad0c821c.png ">

 En regardant le contenu de la matrice, dans «Zm», à l'exception des éléments correspondant à l'expression conditionnelle («Z! = 1»), ils sont représentés par «-».
 En utilisant cette matrice `Zm` lors du traçage, vous pouvez tracer en ignorant la partie correspondant à l'expression conditionnelle.

## 2e ligne: tracez une ligne diagonale avec des hachures
 Référence: [python - Comment puis-je remplir la zone avec matplotlib 2.0 avec uniquement des hachures (pas de couleur de fond)? ](Https://codeday.me/jp/qa/20190618/1041536.html)

 Dans la deuxième ligne de code, la ligne diagonale est dessinée à l'aide de la matrice «Zm».
 Dans `matplotlib.pyplot.pcolor`, le motif de hachures suivant peut être utilisé.
> /   - diagonal hatching
\   - back diagonal
|   - vertical
-   - horizontal
+   - crossed
x   - crossed diagonal
o   - small circle
O   - large circle
.   - dots
*   - stars

 Référence: [matplotlib.collections.Collection.set_hatch](https://matplotlib.org/3.1.1/api/collections_api.html#matplotlib.collections.Collection.set_hatch)

 Les options utilisées ici sont les suivantes.

 --ʻEdgecolor`: couleur des hachures
 --`facecolor`: La couleur d'arrière-plan des hachures. En le définissant sur "aucun", seules les hachures peuvent être affichées tout en laissant la couleur de la carte thermique.
 --`linewidth`: épaisseur de la grille. Si vous spécifiez une valeur supérieure à 0, la grille s'affiche.

 L'apparence de la figure lorsque les options sont modifiées est la suivante.
 (Identique au code final sauf pour la ligne ʻax.pcolor`)

``````python
ax2 = ax.pcolor(Zm, hatch='/', edgecolor='grey',facecolor='none', linewidth=1.0)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167418/aa00bcaf-26c2-822a-9aba-c1bb5a55624c.png)


``````python
ax2 = ax.pcolor(Zm, hatch='/', edgecolor='grey',linewidth=0.0)
```
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167418/13cdac85-38eb-4d3c-1225-fce630d3095e.png)

``````python
ax2 = ax.pcolor(Zm, hatch='/', edgecolor='red',facecolor='none', linewidth=0.0)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167418/65ae65d2-8ae4-5c0c-8490-4c04dcd4a237.png)


###Liste des sites de référence
[numpy.ma.masked_où documentation officielle](https://docs.scipy.org/doc/numpy/reference/generated/numpy.ma.masked_where.html)
[python – matplotlib 2.Comment puis-je remplir la zone avec 0 avec uniquement les hachures (pas de couleur de fond)?](https://codeday.me/jp/qa/20190618/1041536.html)
[matplotlib.collections.Collection.set_hatch](https://matplotlib.org/3.1.1/api/collections_api.html#matplotlib.collections.Collection.set_hatch)



Recommended Posts

Ajouter une ligne diagonale (hachures) à la carte thermique (python, matplotlib)
Carte thermique par Python + matplotlib
Comment ajouter de nouvelles données (lignes droites et tracés) à l'aide de matplotlib
Ajouter le ratio cumulatif à l'histogramme matplotlib
Python 2.7 Ajout de la documentation japonaise à Dash.app
Heatmap avec dendrogramme en Python + matplotlib
Ajouter le niveau de journal TRACE à Python ...?
Ajouter un intervalle de confiance de 95% des deux côtés pour la figure avec Python / Matplotlib
Ajouter le ratio cumulatif au graphique à barres de matplotlib
[Python] Ajouter le nombre total de lignes à Pandas DataFrame
Ajouter du bruit gaussien aux images avec python2.7
Comment ajouter un module python à l'environnement anaconda
Ajouter un environnement virtuel Python à VSCode
[Python] Ajouter un commentaire au fichier d'entrée standard
Vous voulez ajouter des indices de type aux décorateurs Python?
[Python] Comment dessiner plusieurs graphiques avec Matplotlib
[Python] Mémo pour traduire Matplotlib en japonais [Windows]
Comment ajouter un chemin de recherche de module Python
Pour ajouter un module à python que vous mettez dans Julialang
Vitesse: ajouter un élément à la fin du tableau Python
[Python] Comment dessiner un histogramme avec Matplotlib
Mis à jour vers Python 2.7.9
Les bases de #Python (#matplotlib)
Mon matplotlib (Python)
"Backport" vers python 2
[Python] [Django] Comment utiliser le champ de choix et comment ajouter des options
Comment ajouter de l'aide à HDA (avec bonus de script Python)
J'ai essayé de résumer comment utiliser matplotlib de python
[Python] Comment dessiner un graphique linéaire avec Matplotlib
Comment écrire une concaténation de chaînes sur plusieurs lignes en Python
Ajoutez des informations au bas de la figure avec Matplotlib
Comment ajouter des numéros de page à un fichier PDF (en Python)
Mémorandum PyInstaller Convertit Python [.py] en [.exe] avec 2 lignes
Comment ajouter une barre de couleur dans le graphique à barres de matplotlib
[Python] Comment créer un histogramme bidimensionnel avec Matplotlib
[Introduction à Python] Utilisation basique de la bibliothèque matplotlib
Introduction à Python numpy pandas matplotlib (pour ~ B3 ~ part2)
[Python] Comment dessiner un diagramme de dispersion avec Matplotlib
[Python] Road to the Serpent (5) Jouez avec Matplotlib