Ich wollte eine diagonale Linie ('/') auf dem Teil zeichnen, die einen bestimmten Wert auf der Wärmekarte zeigt. Machen Sie sich also eine Notiz.
In der folgenden Heatmap möchte ich den Teil eines bestimmten Werts mit diagonalen Linien gut aussehen lassen.
%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)
In der obigen Abbildung werden einige Werte in der Abbildung mit "Z [3: 5, 5: 8] = 1" auf 1 gesetzt. Zeichnen Sie eine diagonale Linie auf diesem Z [3: 5, 5: 8] -Teil.
Der endgültige Code ist unten.
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)
#Was tust du
Im obigen Code unterscheiden sich die folgenden zwei Zeilen von der ersten.
``````python
Zm = np.ma.masked_where(Z!=1, Z)
ax2 = ax.pcolor(Zm, hatch='/', edgecolor='grey',facecolor='none', linewidth=0.0)
```
## Zeile 1: Matrixmaske
Um nur einen Teil mit diagonalen Linien anzuzeigen, wird in der ersten Zeile des Codes die Matrix (`Zm`) erstellt, die diesen Teil darstellt.
Mit `numpy.ma.masked_where` können Sie eine Matrix erstellen, in der der der Bedingung entsprechende Teil ungültig (maskiert) wird.
Referenz: [offizielles Dokument numpy.ma.masked_where](https://docs.scipy.org/doc/numpy/reference/generated/numpy.ma.masked_where.html)
Die ursprüngliche Matrix ("Z") und die maskierte Matrix ("Zm") sind wie folgt.
<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 ">
Betrachtet man den Inhalt der Matrix in "Zm", so werden sie mit Ausnahme der Elemente, die dem bedingten Ausdruck ("Z! = 1") entsprechen, durch "-" dargestellt.
Wenn Sie diese Matrix "Zm" beim Plotten verwenden, können Sie plotten, indem Sie den Teil ignorieren, der dem bedingten Ausdruck entspricht.
## 2. Linie: Zeichnen Sie eine diagonale Linie mit Schraffur
Referenz: [Python - Wie kann ich den Bereich mit Matplotlib 2.0 nur mit Schraffur (keine Hintergrundfarbe) füllen? ](Https://codeday.me/jp/qa/20190618/1041536.html)
In der zweiten Codezeile wird die diagonale Linie unter Verwendung der Matrix "Zm" gezeichnet.
In `matplotlib.pyplot.pcolor` kann das folgende Schraffurmuster verwendet werden.
> / - diagonal hatching
\ - back diagonal
| - vertical
- - horizontal
+ - crossed
x - crossed diagonal
o - small circle
O - large circle
. - dots
* - stars
Referenz: [matplotlib.collections.Collection.set_hatch](https://matplotlib.org/3.1.1/api/collections_api.html#matplotlib.collections.Collection.set_hatch)
Die hier verwendeten Optionen sind wie folgt.
--`edgecolor`: Schraffurfarbe
--`facecolor`: Die Hintergrundfarbe der Luke. Wenn Sie den Wert auf "Keine" setzen, kann nur eine Schraffur angezeigt werden, während die Farbe der Heatmap erhalten bleibt.
- "Linienbreite": Gitterdicke. Wenn Sie einen Wert größer als 0 angeben, wird das Raster angezeigt.
Das Aussehen der Abbildung beim Ändern der Optionen ist wie folgt.
(Wie der endgültige Code mit Ausnahme der Zeile "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 der Referenzseiten
[numpy.ma.masked_wo offizielle Dokumentation](https://docs.scipy.org/doc/numpy/reference/generated/numpy.ma.masked_where.html)
[python – matplotlib 2.Wie kann ich den Bereich mit 0 nur mit der Schraffur füllen (keine Hintergrundfarbe)?](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