отсутствует строка данных в растровом графике при наложении контуров с помощью matplotlib - PullRequest
0 голосов
/ 14 февраля 2020

Этот вопрос тесно связан с этим:

Matplotlib: pcolor () не отображает последнюю строку и столбец?

Я хочу растровый график ежечасные данные, помеченные по оси Y от 0 до 24. Наличие вектора времени того же размера, что и массив данных, заставил меня пропустить строку данных:

import matplotlib.pyplot as plt
import numpy as np

x=np.random.uniform(size=(24,10))  # dummy data

times=np.arange(24)
xnum=np.arange(10)

fig,ax=plt.subplots()
img=ax.pcolormesh(xnum,times,x,cmap='seismic',
        rasterized=False)

Дая мне это:

first plot

с пропущенным последним часом. Тогда я нашел решение из постинга выше, который должен был добавить 1 к массиву времени. Я хочу этикетки каждые 2 часа, поэтому я также изменяю это:

times=np.arange(25) # NOTE ONE MORE THAN DATA SIZE
fig,ax=plt.subplots()
img=ax.pcolormesh(xnum,times,x,cmap='seismic',
        rasterized=False)
yticki=2
ax.set_yticks(np.arange(min(times), max(times)+yticki,yticki))

enter image description here

Отлично, похоже, работает. Но теперь я хочу добавить контуры. Если я сделаю это с times = np.arange (24) , то я смогу добавить контуры вот так

cont_levs=[-0.5,0.5]
cs=ax.contour(xnum,times,x,cont_levs, colors='k')

и получу это:

enter image description here

Но моя верхняя строка снова отсутствует ...

Однако, если я попробую это с

times=np.arange(25)

, я получу ошибку:

TypeError: Длина y должна быть числом строк в z.

Я могу получить правильные контуры И контуров меток сверху, ограничив вектор y 0- 23:

cs=ax.contour(xnum,times[:-1],x,cont_levs, colors='k')

Это дает мне этот график:

enter image description here

Так что теперь у меня есть правильные утики И 24 растра И контуры сверху, НО только контуры go до времени = 23, что заставляет меня думать, что они либо «сдавлены» и, следовательно, ошибочны, либо, по крайней мере, пропустили последний час.

i можно сместить контуры вверх, чтобы они начинались в t = 0,5 и заканчивались в t = 23,5, выполняя это:

cs=ax.contour(xnum,times[:-1]+0.5,x,cont_levs, colors='k')

, но есть ли способ сохранить все 24 строки данных в растровом графике с помощью исправление у маркировки И также контуры оверплота, идущие прямо от нижней точки t = 0 к вершине (t = 24) графика?

...