Matplotlib绘图比例

时间:2018-09-09 10:28:34

标签: python-3.x matplotlib statistics

我想提供一些工具来帮助学习和教授基本的统计信息。其中之一旨在帮助可视化z得分概率表:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('whitegrid')
import scipy.stats as st

def draw_z_score(x, cond, mean, std, title,color='b'):
    y = st.norm.pdf(x, mean, std)
    z = x[cond]
    plt.plot(x, y)
    plt.ylim(ymin=0)
    plt.xlim(xmin=-4.5, xmax=4.5)
    plt.fill_between(z, 0, st.norm.pdf(z, mean, std),color=color)
    plt.title(title)
    plt.tight_layout()
    plt.show()

def z_table_probabilty (z_score, z_score2=None, area='l'):
    normal = np.arange(-3.9, 3.9, 0.1)
    if area == 'l':
       Pz = round(st.norm.cdf(z_score), 4)
       draw_z_score(normal,normal<z_score,0,1,f'z = {z_score}   P(z)={Pz}')
    elif area == 'r':
       Pz = round(1 - st.norm.cdf(z_score), 4)
       draw_z_score(normal,normal>z_score,0,1,f'Z ={z_score}   P(1-z)={Pz}',color='r')
    elif area == 'tt' and z_score2 != None:
       z2 = max(z_score, z_score2)
       z = min(z_score, z_score2)
       Pz = round(st.norm.cdf(z2) - st.norm.cdf(z), 4)
       draw_z_score(normal,(normal<z2)&(normal>z),0, 1, f'z= {z} i z\'= {z2}    P(z\'-z)={Pz}', color='y')

现在,当我尝试时:

z_table_probabilty(-0.9)

我有:

z-score=-0.9

有人可以告诉我为什么我的图上z分数-0.9等于1吗?为什么x = 4和分布尾部的末端以及x = -4和另一尾部的末端之间的距离不同?整个情节似乎有些动摇。

我做错了什么?

谢谢 MV

1 个答案:

答案 0 :(得分:0)

normal = np.arange(-3.9, 3.9, 0.1)创建一个从-3.93.8的数组。终点不包括在内。因此,您会看到曲线从-3.9开始到3.8结束。

使用normal<z_score,您可以选择normal中所有小于z_score的点。当z_score=-0.9时,这些点从-3.9-1.0,因为-0.9不小于-0.9

总的来说,我建议定义normal有点密集。这样可以避免两个问题。例如

normal = np.linspace(-3.9, 3.9, 391)

0.02而非0.1的步骤创建点。