【问题标题】:Matplotlib plot scaleMatplotlib 绘图比例
【发布时间】:2019-02-14 01:10:35
【问题描述】:

我想制作一些工具来帮助学习和教授基本统计数据。其中之一旨在帮助可视化 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-score -0.9 在我的图上等于 1 吗?为什么 x=4 和分布尾部末端之间的距离以及 x=-4 和其他尾部末端之间的距离不同?整个情节似乎都有些动摇。

我做错了什么?

谢谢 MV

【问题讨论】:

    标签: python-3.x matplotlib statistics


    【解决方案1】:

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

    使用normal&lt;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 的步骤创建点。

    【讨论】:

      猜你喜欢
      • 2021-02-14
      • 2015-10-21
      • 2022-06-15
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多