Matplotlib / Seaborn,数字过于详细,因此关键细节消失了

时间:2018-09-25 18:06:30

标签: python matplotlib seaborn display

我遇到了与matplotlib渲染或我自己的GPU有关的问题。以下是接受Pandas DataFrame并按列输出该数据框中NaN的热图的代码。深色线是NaN,浅色线不是NaN。输入数据帧的长度为500k-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

然而,这是一个问题,较小的暗线通常不会显示在图中。例如,在加载文件时,您会看到以下情况。

首先,它显示如下(注意,有很多黑线): enter image description here

然后在加载一秒钟后,线条消失。

enter image description here

如何解决此问题?无需对数据进行下采样即可。

0 个答案:

没有答案