Fügen Sie der Heatmap (Python, Matplotlib) eine diagonale Linie (Schraffur) hinzu.

Einführung

Ich wollte eine diagonale Linie ('/') auf dem Teil zeichnen, die einen bestimmten Wert auf der Wärmekarte zeigt. Machen Sie sich also eine Notiz.

Was du machen willst

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)

image.png

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.

Lösungen

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

Fügen Sie der Heatmap (Python, Matplotlib) eine diagonale Linie (Schraffur) hinzu.
Heatmap von Python + matplotlib
Hinzufügen neuer Daten (gerade Linien und Diagramme) mit matplotlib
Fügen Sie dem Matplotlib-Histogramm ein kumulatives Verhältnis hinzu
Python 2.7 Fügen Sie Dash.app japanische Dokumentation hinzu
Heatmap mit Dendrogramm in Python + Matplotlib
TRACE-Protokollebene zu Python hinzufügen ...?
Fügen Sie auf beiden Seiten ein Konfidenzintervall von 95% hinzu, um mit Python / Matplotlib zu rechnen
Fügen Sie dem Balkendiagramm von matplotlib ein kumulatives Verhältnis hinzu
[Python] Fügen Sie Pandas DataFrame insgesamt Zeilen hinzu
Fügen Sie Bildern mit Python2.7 Gaußsches Rauschen hinzu
So fügen Sie der Anaconda-Umgebung ein Python-Modul hinzu
Fügen Sie VSCode eine virtuelle Python-Umgebung hinzu
[Python] Fügen Sie der Standardeingabedatei einen Kommentar hinzu
Möchten Sie Python-Dekoratoren Typhinweise hinzufügen?
[Python] Zeichnen mehrerer Diagramme mit Matplotlib
[Python] Memo zur Übersetzung von Matplotlib ins Japanische [Windows]
So fügen Sie einen Suchpfad für Python-Module hinzu
So fügen Sie Python ein Modul hinzu, das Sie in Julialang eingefügt haben
Geschwindigkeit: Element am Ende des Python-Arrays hinzufügen
[Python] Wie zeichnet man mit Matplotlib ein Histogramm?
Auf Python 2.7.9 aktualisiert
# Python-Grundlagen (#matplotlib)
Meine Matplotlib (Python)
"Backport" zu Python 2
[Python] [Django] Verwendung des Auswahlfelds und Hinzufügen von Optionen
So fügen Sie HDA Hilfe hinzu (mit Python-Skriptbonus)
Ich habe versucht zusammenzufassen, wie man Matplotlib von Python verwendet
[Python] Wie zeichnet man mit Matplotlib ein Liniendiagramm?
So schreiben Sie in Python die Verkettung von Zeichenfolgen in mehrere Zeilen
Fügen Sie mit Matplotlib Informationen am unteren Rand der Abbildung hinzu
So fügen Sie einer PDF-Datei Seitenzahlen hinzu (in Python)
PyInstaller-Memorandum Konvertieren Sie Python [.py] in [.exe] mit 2 Zeilen
So fügen Sie dem Balkendiagramm von matplotlib einen Farbbalken hinzu
[Python] So erstellen Sie mit Matplotlib ein zweidimensionales Histogramm
[Einführung in Python] Grundlegende Verwendung der Bibliothek matplotlib
Einführung in Python numpy pandas matplotlib (für ~ B3 ~ part2)
[Python] Wie zeichnet man mit Matplotlib ein Streudiagramm?
[Python] Weg zur Schlange (5) Spiele mit Matplotlib