Я застрял с проблемой, связанной с рендерингом matplotlib или моим собственным графическим процессором.Ниже приведен код, который принимает Pandas DataFrame и выводит тепловую карту NaN в этом кадре данных для каждого столбца.Темная линия - это NaN, более светлая линия - это не NaN.Входные кадры данных могут иметь длину от 500 тыс. До 1 млн. Строк.Это означает, что не каждый NaN (особенно если он только 1 или 2) виден на графике.
def plot_nans(df, dwelling_id):
"""
Create a heatmap of the NaNs in the input DataFrame.
:param df: Pandas DataFrame
:param dwelling_id: String
:return: Seaborn heatmap as a Figure
"""
plt.clf()
df = df.isnull()
#df = df.resample('12H').sum()
# Downsample to make all data visible?
# Reindex datetimes
# https://stackoverflow.com/questions/41046630/set-time-formatting-on-a-datetime-index-when-plotting-pandas-series
try:
df.index = df.index.to_period('D')
except:
print('plot_nans could not set df.index.to_period')
# Plot heatmap
n = int(len(df)*0.1) # Choose amount of yticklabels to show
try:
fig = sns.heatmap(df, cmap='Reds', square=False, vmin=0, cbar=False, yticklabels=n*2, cbar_kws={})
except TypeError:
print('plot_nans ValueError')
fig = sns.heatmap(df, cmap='Reds', square=False, vmin=0, cbar=False, cbar_kws={})
# Set cbar ticks manually
#cbar = fig.collections[0].colorbar
#cbar.set_ticks([0, 1])
#cbar.set_ticklabels(['Not NaN', 'NaN'])
# Correct layout
fig.invert_yaxis()
fig.tick_params(axis='x', rotation=90)
fig.tick_params(axis='y', rotation=0)
fig.set(xlabel='Column [-]', ylabel='Index [-]')
plt.title('Dwelling ID: '+dwelling_id)
fig = fig.get_figure()
fig.tight_layout()
fig.show()
print('Saving heatmap')
fig.savefig('//datc//opschaler//nan_information//figures//' + dwelling_id + '.png', dpi=1200)
return fig
Исходный график выхода можно увидеть ниже.
![Original image](https://i.stack.imgur.com/Bcfl7.png)
Однако проблема в том, что меньший темный цветлинии часто не отображаются на сюжете.Например, при загрузке файла вы можете увидеть следующее:
Сначала он выглядит так (заметьте, что «много» маленьких темных линий): ![enter image description here](https://i.stack.imgur.com/482LD.png)
Затем через секунду после загрузки строки исчезают.
![enter image description here](https://i.stack.imgur.com/WkMif.png)
Как можно решить эту проблему?Желательно без необходимости понижать данные.