Python 不断覆盖之前情节的历史记录,但没有将其与所需的情节一起保存
Python keeps overwriting hist on previous plot but doesn't save it with the desired plot
我正在保存两个单独的图,每个图应该包含 2 个图。
问题是第一个图没问题,但是第二个图在新图上没有被覆盖,而是在前一个图上被覆盖,但是在保存的图中,我只找到一个图:
这是第一张图,我猜对了第一张图:
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:查看 This Question,我发现清除绘图历史有助于数字不混淆,但仍然是我的第二组绘图,我的意思是对数正态分布不保存在一起,我只得到曲线而不是直方图。
发生这种情况,因为您设置了 normed = True,这意味着直方图下的区域被归一化为 1。并且由于您的 bin 非常宽,这意味着直方图条的实际高度非常小(在这种情况下太小以至于它们不可见)
如果你使用
n, bins, _ = plt.hist(data, bins = np.linspace(data[0], data[-1], 100), normed=True, alpha= 1)
n 将包含您的 bin 的 y 值,您可以自己确认。
另请查看 plt.hist.
的文档
因此,如果您将 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()
会给你两个类似的图(因为它是随机的):
显示 bin 的数量如何改变直方图。
直方图可视化数据沿一维的分布,因此不确定输入和 bin 的数量是什么意思。
我正在保存两个单独的图,每个图应该包含 2 个图。
问题是第一个图没问题,但是第二个图在新图上没有被覆盖,而是在前一个图上被覆盖,但是在保存的图中,我只找到一个图:
这是第一张图,我猜对了第一张图:
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:查看 This Question,我发现清除绘图历史有助于数字不混淆,但仍然是我的第二组绘图,我的意思是对数正态分布不保存在一起,我只得到曲线而不是直方图。
发生这种情况,因为您设置了 normed = True,这意味着直方图下的区域被归一化为 1。并且由于您的 bin 非常宽,这意味着直方图条的实际高度非常小(在这种情况下太小以至于它们不可见)
如果你使用
n, bins, _ = plt.hist(data, bins = np.linspace(data[0], data[-1], 100), normed=True, alpha= 1)
n 将包含您的 bin 的 y 值,您可以自己确认。
另请查看 plt.hist.
因此,如果您将 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()
会给你两个类似的图(因为它是随机的):
显示 bin 的数量如何改变直方图。 直方图可视化数据沿一维的分布,因此不确定输入和 bin 的数量是什么意思。