Matplotlib Python在上一个绘图上不断覆盖hist,但不将其与所需绘图一起保存

Matplotlib Python在上一个绘图上不断覆盖hist,但不将其与所需绘图一起保存,matplotlib,plot,histogram,figure,subplot,Matplotlib,Plot,Histogram,Figure,Subplot,我保存了两个单独的数字,每个数字应该包含两个图 问题是,第一个图形正常,但第二个图形在新绘图上不会被覆盖,而是在上一个图形上被覆盖,但在保存的图形中,我只找到其中一个绘图: 这是第一个数字,我正确地得到了第一个数字: import scipy.stats as s import numpy as np import os import pandas as pd import openpyxl as pyx import matplotlib matplotlib.rcParams["backen

我保存了两个单独的数字,每个数字应该包含两个图

问题是,第一个图形正常,但第二个图形在新绘图上不会被覆盖,而是在上一个图形上被覆盖,但在保存的图形中,我只找到其中一个绘图:

这是第一个数字,我正确地得到了第一个数字:

import scipy.stats as s
import numpy as np
import os
import pandas as pd
import openpyxl as pyx
import matplotlib
matplotlib.rcParams["backend"] = "TkAgg"
#matplotlib.rcParams['backend'] = "Qt4Agg"
#matplotlib.rcParams['backend'] = "nbAgg"
import matplotlib.pyplot as plt
import math

data = [336256, 620316, 958846, 1007830, 1080401]
pdf = array([ 0.00449982,  0.0045293 ,  0.00455894,  0.02397463,
    0.02395788,  0.02394114])

fig, ax = plt.subplots();
fig = plt.figure(figsize=(40,30))

x = np.linspace(np.min(data), np.max(data), 100); 
plt.plot(x, s.exponweib.pdf(x, *s.exponweib.fit(data, 1, 1, loc=0, scale=2)))
plt.hist(data, bins = np.linspace(data[0], data[-1], 100), normed=True, alpha= 1)
text1= ' Weibull'
plt.savefig(text1+  '.png' )

datar =np.asarray(data)
mu, sigma = datar.mean() , datar.std() # mean and standard deviation

normal_std = np.sqrt(np.log(1 + (sigma/mu)**2))
normal_mean = np.log(mu) - normal_std**2 / 2
hs = np.random.lognormal(normal_mean, normal_std, 1000)
print(hs.max())    # some finite number
print(hs.mean())   # about 136519
print(hs.std())    # about 50405

count, bins, ignored = plt.hist(hs, 100, normed=True)    
x = np.linspace(min(bins), max(bins), 10000)
pdfT = [];
for el in range (len(x)):
    pdfTmp = (math.exp(-(np.log(x[el]) - normal_mean)**2 / (2 * normal_std**2)))
    pdfT += [pdfTmp]


pdf = np.asarray(pdfT)
这是第二套:

fig, ax = plt.subplots();
fig = plt.figure(figsize=(40,40))

plt.plot(x, pdf, linewidth=2, color='r')
plt.hist(data, bins = np.linspace(data[0], data[-1], 100), normed=True, alpha= 1)

text= ' Lognormal '
plt.savefig(text+ '.png' )
第一个绘图将直方图与曲线一起保存。相反,第二个只保存曲线


更新1:查看,我发现清除绘图历史将有助于数字不会混淆,但我的第二组绘图,我的意思是对数正态分布不会一起保存,我只得到曲线,而不是直方图。

这正在发生,因为您已将normed设置为True,这意味着直方图下的区域被归一化为1。由于你的箱子很宽,这意味着直方图条的实际高度非常小,在这种情况下,直方图条非常小,以至于它们不可见

如果你使用

n, bins, _ = plt.hist(data, bins = np.linspace(data[0], data[-1], 100), normed=True, alpha= 1)
n将包含您箱子的y值,您可以自己确认。 还可以查看有关的文档

因此,如果将normed设置为False,直方图将可见

编辑:箱子数量

import numpy as np
import matplotlib.pyplot as plt

rand_data = np.random.uniform(0, 1.0, 100)

fig = plt.figure()

ax_1 = fig.add_subplot(211)
ax_1.hist(rand_data, bins=10)

ax_2 = fig.add_subplot(212)
ax_2.hist(rand_data, bins=100)

plt.show()
将为您提供两个相似的绘图,因为它是随机的:

这显示了箱子的数量如何改变直方图。
直方图显示了数据沿一个维度的分布,因此不确定输入和存储箱的数量是什么意思。

哇,非常感谢!!我可以问你为什么这样写吗:n,bins,uu下划线是什么?我还想知道一点,为什么bins的数量比我输入的数据的数量(5)高?这很有指导意义!我忘记了我处理对数正态图的方式是不同的,它们已经被规格化了plt.hist返回一个包含3个值的元组,n,bin,patches,因为patches不相关,我只是用u作为它的值。关于箱子的数量,你用箱子参数设置箱子和它们的边,也就是说,当箱子=np.linspacedata[0],data[-1],100时,你要创建100个箱子,第一个箱子的左边缘对应于x中的最小值,最后一个箱子的右边缘对应于x中的最大值。非常感谢你,所以如果我决定总是有5个垃圾箱,足够让它变成5个而不是100个?因为我认为箱子是输入数量的直接指示器