добавление штрихов к графику тепловой карты - PullRequest
0 голосов
/ 21 марта 2019

Есть ли способ вывести определенные «ячейки» в тепловой карте морского дна, которая, например, выполнить условие? Я уже пробовал это с замаскированными массивами и matplotlib pcolor, но оказалось, что он заштриховал неправильные ячейки.

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
zm = np.ma.masked_less(flights.values, 200)
x= np.arange(0,12)
y= np.arange(0,12)
sns.heatmap(flights,linewidth=.1)
plt.pcolor(x, y, zm, hatch='//', alpha=0.)

plt.show()

1 Ответ

1 голос
/ 22 марта 2019

Я думаю, что идея / стратегия верна. Вы просто не использовали правильные координаты.

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
print(flights)
zm = np.ma.masked_less(flights.values, 200)
x= np.arange(len(flights.columns)+1)
y= np.arange(len(flights.index)+1)
sns.heatmap(flights,linewidth=.1)
plt.pcolor(x, y, zm, hatch='//', alpha=0.)

plt.show()

enter image description here

Потенциально можно хотеть выводить отдельные ячейки вместо всей области. Это трудно. В общем, нужно создать сетку из мелких тиков и раскрасить ее в белый цвет, чтобы наложить штриховку.

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

plt.rcParams["axes.axisbelow"] = False

flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")

zm = np.ma.masked_less(flights.values, 200)
x= np.arange(len(flights.columns)+1)
y= np.arange(len(flights.index)+1)

fig, ax = plt.subplots()
sns.heatmap(flights,linewidth=0, ax=ax)

ax.pcolor(x, y, zm, hatch='//', alpha=0.)

ax.set_xticks(np.arange(flights.shape[1]+1), minor=True)
ax.set_yticks(np.arange(flights.shape[1]+1), minor=True)
ax.grid(True, which="minor", color="w", linewidth=2)
ax.tick_params(which="minor", left=False, bottom=False)

plt.show()

enter image description here

...