Python会在先前的绘图上继续覆盖历史记录,但不会将其保存为所需的绘图

时间:2018-08-01 13:08:03

标签: matplotlib plot histogram figure subplot

我要保存两个单独的图形,每个图形应一起包含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,我发现清除绘图历史记录不会使图形混淆,但是仍然是我的第二组绘图,我的意思是对数正态分布不能一起保存,我只得到曲线而不是直方图。

1 个答案:

答案 0 :(得分:1)

之所以会发生这种情况,是因为您已将normed = True设置为正,这意味着直方图下的区域被归一化为1。并且由于您的垃圾箱非常宽,这意味着直方图条的实际高度非常小(在这种情况下很小到看不见)

如果您使用

from pymongo import MongoClient

mongo_host = "(enter the prefix).mlab.com"
mongo_port = (enter port number)
mongo_db = "(enter db name)"
mongo_user = "(enter username)"
mongo_pass = "(enter password)"
connection = MongoClient(mongo_host, mongo_port)
db = connection[mongo_db]
db.authenticate(mongo_user, mongo_pass)

n将包含垃圾箱的y值,您可以自己确认。
还可以查看plt.hist的文档。

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

编辑:箱数

n, bins, _ = plt.hist(data, bins = np.linspace(data[0], data[-1], 100), normed=True, alpha= 1)

将为您提供两个相似的图(由于随机): enter image description here

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