我想问一下如何用Python绘制概率密度函数(PDF)图。
这是我的密码。
import numpy as np
import pandas as pd
from pandas import DataFrame
import matplotlib.pyplot as plt
import scipy.stats as stats。
x = np.random.normal(50, 3, 1000)
source = {"Genotype": ["CV1"]*1000, "AGW": x}
df=pd.DataFrame(source)
df

我生成了一个数据帧。然后,我试着画一张PDF图。
df["AGW"].sort_values()
df_mean = np.mean(df["AGW"])
df_std = np.std(df["AGW"])
pdf = stats.norm.pdf(df["AGW"], df_mean, df_std)
plt.plot(df["AGW"], pdf)

我得到了上面的图。我做错了什么?请允许我绘制概率密度函数(PDF)图,也就是所谓的正态分布图。
你能让我知道我需要使用哪些代码(或库)来绘制PDF图形吗?
总是非常感谢!!
发布于 2022-02-28 15:16:51
您只需要对值进行排序(而不是真正检查编辑之后是什么)。
pdf = stats.norm.pdf(df["AGW"].sort_values(), df_mean, df_std)
plt.plot(df["AGW"].sort_values(), pdf)它会成功的。
行df["AGW"].sort_values()不改变df。也许你是说df.sort_values(by=['AGW'], inplace=True)。在这种情况下,完整的代码是:
import numpy as np
import pandas as pd
from pandas import DataFrame
import matplotlib.pyplot as plt
import scipy.stats as stats
x = np.random.normal(50, 3, 1000)
source = {"Genotype": ["CV1"]*1000, "AGW": x}
df=pd.DataFrame(source)
df.sort_values(by=['AGW'], inplace=True)
df_mean = np.mean(df["AGW"])
df_std = np.std(df["AGW"])
pdf = stats.norm.pdf(df["AGW"], df_mean, df_std)
plt.plot(df["AGW"], pdf)这意味着:

编辑:
我认为这里已经有了分布(x是正态分布的),所以我们不需要生成x的pdf。
mu = 50
variance = 3
sigma = math.sqrt(variance)
x = np.linspace(mu - 5*sigma, mu + 5*sigma, 1000)
plt.plot(x, stats.norm.pdf(x, mu, sigma))
plt.show()这里我们不需要从x点生成分布,我们只需要绘制我们已经拥有的分布的密度。所以你可以用这个:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x = np.random.normal(50, 3, 1000) #Generating Data
source = {"Genotype": ["CV1"]*1000, "AGW": x}
df=pd.DataFrame(source) #Converting to pandas DataFrame
df.plot(kind = 'density'); # or df["AGW"].plot(kind = 'density');这意味着:

如果需要,可以使用其他包,如海运:
import seaborn as sns
plt.figure(figsize = (5,5))
sns.kdeplot(df["AGW"] , bw = 0.5 , fill = True)
plt.show()

或者这个:
import seaborn as sns
sns.set_style("whitegrid") # Setting style(Optional)
plt.figure(figsize = (10,5)) #Specify the size of figure
sns.distplot(x = df["AGW"] , bins = 10 , kde = True , color = 'teal'
, kde_kws=dict(linewidth = 4 , color = 'black')) #kde for normal distribution
plt.show()

有关更多信息,请查看此文章。
https://stackoverflow.com/questions/71296986
复制相似问题