Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在正态分布图中用Matplotlib注释四分位数_Python_Numpy_Matplotlib_Plot - Fatal编程技术网

Python 在正态分布图中用Matplotlib注释四分位数

Python 在正态分布图中用Matplotlib注释四分位数,python,numpy,matplotlib,plot,Python,Numpy,Matplotlib,Plot,我正在使用一个数据集,到目前为止,我已经制作了一个叠加正态分布曲线的直方图。 我想标出四分位数,如图所示(方框图仅供参考)。 这是我正在使用的代码: import matplotlib.pyplot as plt import numpy as np import scipy.stats as stats depDelay.sort() plt.hist(depDelay, bins=100, normed=True) hmean = np.mean(depDelay) hstd = np.

我正在使用一个数据集,到目前为止,我已经制作了一个叠加正态分布曲线的直方图。

我想标出四分位数,如图所示(方框图仅供参考)。 这是我正在使用的代码:

import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats

depDelay.sort()
plt.hist(depDelay, bins=100, normed=True)
hmean = np.mean(depDelay)
hstd = np.std(depDelay)
pdf = stats.norm.pdf(depDelay, hmean, hstd)
markers = [np.percentile(depDelay,50)]
plt.plot(DepDelay, pdf,'-o',markevery=markers)
plt.title('Distribution of Departure Delay')
plt.xlabel('Departure Delay (in mins)')
plt.ylabel('Frequency')
plt.savefig('depDelayNormDist.png')
plt.show()

如何使用matplotlib绘制相同的图像?

我尝试过复制引用的图像。我不确定你所说的四分位数的确切含义,但我已经在pdf中为Q1和Q3添加了标签,并在四分位数之间添加了百分比

import numpy as np
import scipy
import pandas as pd
from scipy.stats import norm
import matplotlib.pyplot as plt
from matplotlib.mlab import normpdf

# dummy data
mu = 0
sigma = 1
n_bins = 50
s = np.random.normal(mu, sigma, 1000)

fig, axes = plt.subplots(nrows=2, ncols=1, sharex=True)

#histogram
n, bins, patches = axes[1].hist(s, n_bins, normed=True, alpha=.1, edgecolor='black' )
pdf = 1/(sigma*np.sqrt(2*np.pi))*np.exp(-(bins-mu)**2/(2*sigma**2))

median, q1, q3 = np.percentile(s, 50), np.percentile(s, 25), np.percentile(s, 75)
print(q1, median, q3)

#probability density function
axes[1].plot(bins, pdf, color='orange', alpha=.6)

#to ensure pdf and bins line up to use fill_between.
bins_1 = bins[(bins >= q1-1.5*(q3-q1)) & (bins <= q1)] # to ensure fill starts from Q1-1.5*IQR
bins_2 = bins[(bins <= q3+1.5*(q3-q1)) & (bins >= q3)]
pdf_1 = pdf[:int(len(pdf)/2)]
pdf_2 = pdf[int(len(pdf)/2):]
pdf_1 = pdf_1[(pdf_1 >= norm(mu,sigma).pdf(q1-1.5*(q3-q1))) & (pdf_1 <= norm(mu,sigma).pdf(q1))]
pdf_2 = pdf_2[(pdf_2 >= norm(mu,sigma).pdf(q3+1.5*(q3-q1))) & (pdf_2 <= norm(mu,sigma).pdf(q3))]

#fill from Q1-1.5*IQR to Q1 and Q3 to Q3+1.5*IQR
axes[1].fill_between(bins_1, pdf_1, 0, alpha=.6, color='orange')
axes[1].fill_between(bins_2, pdf_2, 0, alpha=.6, color='orange')

print(norm(mu, sigma).cdf(median))
print(norm(mu, sigma).pdf(median))

#add text to bottom graph.
axes[1].annotate("{:.1f}%".format(100*norm(mu, sigma).cdf(q1)), xy=((q1-1.5*(q3-q1)+q1)/2, 0), ha='center')
axes[1].annotate("{:.1f}%".format(100*(norm(mu, sigma).cdf(q3)-norm(mu, sigma).cdf(q1))), xy=(median, 0), ha='center')
axes[1].annotate("{:.1f}%".format(100*(norm(mu, sigma).cdf(q3+1.5*(q3-q1)-q3)-norm(mu, sigma).cdf(q3))), xy=((q3+1.5*(q3-q1)+q3)/2, 0), ha='center')
axes[1].annotate('q1', xy=(q1, norm(mu, sigma).pdf(q1)), ha='center')
axes[1].annotate('q3', xy=(q3, norm(mu, sigma).pdf(q3)), ha='center')

axes[1].set_ylabel('probability')

#top boxplot
axes[0].boxplot(s, 0, 'gD', vert=False)
axes[0].axvline(median, color='orange', alpha=.6, linewidth=.5)
axes[0].axis('off')

plt.subplots_adjust(hspace=0)
plt.show()
将numpy导入为np
进口西皮
作为pd进口熊猫
从scipy.stats导入norm
将matplotlib.pyplot作为plt导入
从matplotlib.mlab导入PDF
#虚拟数据
μ=0
西格玛=1
n_bins=50
s=np.随机.正态(μ,西格玛,1000)
图,轴=plt.子批次(nrows=2,ncols=1,sharex=True)
#直方图
n、 面元,面片=轴[1]。历史(s,n_面元,normed=True,alpha=0.1,edgecolor='black')
pdf=1/(sigma*np.sqrt(2*np.pi))*np.exp(-bin mu)**2/(2*sigma**2))
中位数,q1,q3=np百分位(s,50),np百分位(s,25),np百分位(s,75)
打印(第一季度,中值,第三季度)
#概率密度函数
轴[1]。绘图(箱,pdf,color='orange',alpha=.6)
#确保pdf和箱子排成一行,以便在两者之间使用填充。

bins_1=bins[(bins>=q1-1.5*(q3-q1))&(bins=norm(mu,sigma).pdf(q1-1.5*(q3-q1))&(pdf_1=norm(mu,sigma).pdf(q3+1.5*(q3-q1))&(pdf_2)你看过
plt.boxplot
vert=False
吗?而且,你的数据不是正态分布的好模型。是的@Paul我也在使用一个框须图,但我需要这个图来演示,这正是我想要的。谢谢。