Je voulais dessiner une ligne diagonale ('/') sur la partie montrant une valeur spécifique sur la carte thermique, alors prenez note.
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)
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]».
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