首页 > 解决方案 > matplotlib 直方图上的意外图

问题描述

我是 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

我想从每一层中提取权重并从中生成分布。我已经有它的代码并且它正在工作,但是对于某些时期,直方图有一些奇怪的颜色,看起来像更多的直方图。我附上了带有问题的示例图片。样本直方图

正如你所看到的,有一些粉红色的部分被直方图的蓝色块所掩盖。有人可以帮我理解那是什么吗?

我的代码目前看起来像这样(假设我的文件已加载到阅读器中):

        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")

请注意,完成循环后会生成四个不同的图(图像),因为 csv 文件有四行。我只发布了其中一个的示例图像。我没有尝试在一张图中绘制所有行。

编辑

我减少了垃圾箱的数量,现在它更加突出。我正在附加另一个示例图像。另一个样本

解决了

在循环内添加 plt.figure() 解决了它。请查看下面的评论和答案以获取详细信息。更新后的循环应该如下:

        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()

标签: python-3.xmatplotlibdeep-learningdata-sciencedata-analysis

解决方案


我试图重现您的错误,并且很可能您在一个图中绘制了多个直方图:

%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)

在此处输入图像描述


推荐阅读