Один и тот же код Matplotlib создает разные изображения на разных машинах - PullRequest
1 голос
/ 28 апреля 2020

У меня есть функция Matplotlib, позволяющая создать запутанную матрицу и сохранить ее в файл:

def pretty_print_conf_matrix(y_true, y_pred,
                             classes,
                             normalize=False,
                             title='{} Confusion matrix'.format(describe_test_setup()),
                             cmap=plt.cm.Blues,
                             out_dir=None):
    """
    Code adapted from: http://scikit-learn.org/stable/auto_examples/model_selection/plot_confusion_matrix.html#sphx-glr-auto-examples-model-selection-plot-confusion-matrix-py
    """
    fig, ax = plt.subplots(figsize=(15, 15))
    cm = confusion_matrix(y_true, y_pred, labels=classes)

    # Configure Confusion Matrix Plot Aesthetics (no text yet)
    cax = ax.imshow(cm, interpolation='nearest', cmap=cmap)
    ax.set_title(title, fontsize=16)
    ax.set_xticks(np.arange(len(classes)))
    ax.set_yticks(np.arange(len(classes)))
    ax.set_xticklabels(classes)
    ax.set_yticklabels(classes)
    ax.tick_params(axis='x', labelsize=14)
    ax.tick_params(axis='y', labelsize=14)
    plt.setp(ax.get_xticklabels(), rotation=45, ha='right', rotation_mode='anchor')
    plt.colorbar(cax)

    ax.set_ylabel('True label', fontsize=16)
    ax.set_xlabel('Predicted label', fontsize=16, rotation='horizontal')

    # Calculate normalized values (so all cells sum to 1) if desired
    if normalize:
        cm = np.round(cm.astype('float') / cm.sum(), 2)  # (axis=1)[:, np.newaxis]

    thresh = cm.max() / 1.5 if normalize else cm.max() / 2

    # Place Numbers as Text on Confusion Matrix Plot
    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
        ax.text(j, i, cm[i, j],
                 ha="center",
                 va="center",
                 color="white" if cm[i, j] > thresh else "black",
                 fontsize=12)

    #fig.tight_layout()
    plt.show(block=False)

    if out_dir is not None:
        out_file = os.path.join(out_dir, 'Confusion Matrix{}.png'.format(describe_test_setup()))
        fig.savefig(out_file, dpi=300)

Это хорошо работает на двух моих машинах, но на третьем - уродливые сжатые изображения. Все они используют один и тот же исходный код.

Пример правильной работы (разрешение 4500x4500):

Пример работы плохо (разрешение 1028x715):

enter image description here

Я думал, что это может быть вызвано тем, что я запускаю разные версии matplotlib, но при использовании pip freeze я вижу matplotlib==3.1.2 на обеих машинах.

Есть идеи, что может быть причиной?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...