从csv数据框中绘制列的Poision分布的PMF

时间:2019-07-12 21:36:17

标签: python matplotlib

我正试图完成此功能的编写

def plot_poisson(df, col='open', n_pts=100)

其中:

  • df =包含已用csv文件加载的数据的数据框,
  • col = df变量中的列名,
  • n_pts =点数

我正在尝试使用列的平均值和bar函数绘制列col的泊松分布的PMF。

我是一个初学者,即使看了https://pythonspot.com/matplotlib-bar-chart/,我也不了解plt.bar的工作原理,以及如何合并n_pts参数。

def plot_poisson(df, col='open', n_pts=100):
fig, ax = plt.subplots(figsize=(10, 5))
plt.bar
plt.xlabel("X")
plt.ylabel("P(X|\mu)")
plt.title("Poisson PMF")
return ax

2 个答案:

答案 0 :(得分:1)

因此,如果我理解正确,您想从泊松分布中提取n_pts个数字,该分布的每个间隔的平均事件数等于数据的平均值(来自dataframe列)。
然后您要绘制分布。

如果是这样,您可以使用numpy轻松完成此操作,该功能提供了从分布中提取随机数的功能。例如,numpy.random.poisson从泊松分布中提取数字。

使用plt.hist比使用plt.bar要容易得多。
使用bar时,您必须选择一个容器大小和容器位置,自己计算每个容器中有多少数据,然后绘制直方图。 plt.hist为您完成所有这一切。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

def plot_poisson(df, col='open', n_pts=100):
    lm = df[col].mean() #get the mean value of your data
    poisdata = np.random.poisson(lm, n_pts)
    plt.hist(poisdata, density=True, alpha=0.5)
    plt.xlabel("X")
    plt.ylabel("P(X|\mu)")
    plt.title("Poisson PMF")
    plt.show()

此功能产生的示例图片:

enter image description here

答案 1 :(得分:0)

尝试这个:

 def plot_poisson(df, col='open', n_pts=100):
    pts=np.arange(n_pts)
    fig,ax=plt.subplots(figsize=(10,5))
    lm = df[col].mean() #get the mean value of your data
    poisdata = np.random.poisson(lm)
    ax.bar(pts,poisdata.pmf(pts))
    ax.set_xlabel("X")
    ax.set_ylabel("P(X|\mu)")
    ax.set_title("Poisson PMF")
    return ax