Неожиданные графики на гистограммах matplotlib - PullRequest
1 голос
/ 06 мая 2020

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

У меня есть файл csv со значениями веса для отдельных нейронов на разных уровнях моей модели глубокого обучения. Поскольку в моей модели четыре слоя, файловая структура выглядит так:

weight_1, weight_2 ...... weight_n

weight_1, weight_2 ...... weight_n

weight_1, weight_2 ...... weight_n

weight_1, weight_2 ...... weight_n

Я хочу извлечь веса из каждого слой и сгенерировать из него распределения. У меня уже есть код для него, и он работает, но для некоторых эпох гистограммы имеют странные цвета, которые выглядят как другие гистограммы. К вопросу прилагаю образец изображения. sample histogram

Как видите, есть небольшая часть sh мизинца, которая замаскирована синим цветом гистограммы. Может ли кто-нибудь помочь мне понять, что это?

Мой код в настоящее время выглядит так (предположим, что мой файл загружен в считывающее устройство):

        for row in csv_reader:
            a = np.array(row)
            a_float = a.astype(np.float)
            plt.hist(a_float,bins=20)
            plt.xlabel("weight_range")
            plt.ylabel("frequency")

Обратите внимание, что ЧЕТЫРЕ разных графика (изображения) создаются после завершения l oop, так как файл csv состоит из четырех строк. Я разместил только образец изображения для одного из них. Я не пытался построить все строки на одном графике.

EDIT

Я уменьшил количество ячеек, и теперь он более заметен. Я прилагаю еще один пример изображения. another_sample

РЕШЕНО

Добавление plt.figure () внутри l oop решило эту проблему. Пожалуйста, проверьте комментарии и ответьте ниже, чтобы узнать подробности. Обновленный l oop должен быть таким:

        for row in csv_reader:
            a = np.array(row)
            a_float = a.astype(np.float)
            plt.figure()
            plt.hist(a_float,bins=20)
            plt.xlabel("weight_range")
            plt.ylabel("frequency")
            plt.close()

1 Ответ

2 голосов
/ 06 мая 2020

Я пытался воспроизвести вашу ошибку, и, скорее всего, вы строите несколько гистограмм на одном графике:

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

arrays = np.array([np.random.random() for i in range(200)]).reshape(2, 100)

fig = plt.figure()
ax = fig.add_subplot(111)
for array in arrays:
    ax.hist(array, bins = 20)

enter image description here

...