如何从 Python 中的数据框制作正态分布图?
How to make a normal distribution graph from data frame in Python?
我的问题是如何从 Python 中的数据框制作正态分布图。我可以找到很多信息来从随机数制作这样的图表,但我不知道如何从数据框制作它。
首先,我生成了随机数并制作了一个数据框。
import numpy as np
import pandas
from pandas import DataFrame
cv1 = np.random.normal(50, 3, 1000)
source = {"Genotype": ["CV1"]*1000, "AGW": cv1}
Cultivar_1=DataFrame(source)
然后,我试着做了一个正态分布图。
sns.kdeplot(data = Cultivar_1['AGW'])
plt.xlim([30,70])
plt.xlabel("Grain weight (mg)", size=12)
plt.ylabel("Frequency", size=12)
plt.grid(True, alpha=0.3, linestyle="--")
plt.show()
但是,这是一个密度图,不是使用均值和标准差.[=15计算的正态分布图=]
你能告诉我制作正态分布图需要用到哪些代码吗?
谢谢!!
我找到了一种从数据框制作正态分布图的解决方案。
#Library
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy.stats as stats
#Generating data frame
x = np.random.normal(50, 3, 1000)
source = {"Genotype": ["CV1"]*1000, "AGW": x}
df = pd.DataFrame(source)
# Calculating mean and Stdev of AGW
df_mean = np.mean(df["AGW"])
df_std = np.std(df["AGW"])
# Calculating probability density function (PDF)
pdf = stats.norm.pdf(df["AGW"].sort_values(), df_mean, df_std)
# Drawing a graph
plt.plot(df["AGW"].sort_values(), pdf)
plt.xlim([30,70])
plt.xlabel("Grain weight (mg)", size=12)
plt.ylabel("Frequency", size=12)
plt.grid(True, alpha=0.3, linestyle="--")
plt.show()
我在使用 dataframe 时遇到问题,在绘制时它显示多行,然后在您的代码中找到了解决方案。谢谢!!
- 通过在
pdf
和 plt.plot
行添加 .sort_values()
到 df
。
pdf = stats.norm.pdf(df["AGW"].sort_values(), df_mean, df_std)
plt.plot(df["AGW"].sort_values(), pdf)
我的问题是如何从 Python 中的数据框制作正态分布图。我可以找到很多信息来从随机数制作这样的图表,但我不知道如何从数据框制作它。
首先,我生成了随机数并制作了一个数据框。
import numpy as np
import pandas
from pandas import DataFrame
cv1 = np.random.normal(50, 3, 1000)
source = {"Genotype": ["CV1"]*1000, "AGW": cv1}
Cultivar_1=DataFrame(source)
然后,我试着做了一个正态分布图。
sns.kdeplot(data = Cultivar_1['AGW'])
plt.xlim([30,70])
plt.xlabel("Grain weight (mg)", size=12)
plt.ylabel("Frequency", size=12)
plt.grid(True, alpha=0.3, linestyle="--")
plt.show()
但是,这是一个密度图,不是使用均值和标准差.[=15计算的正态分布图=]
你能告诉我制作正态分布图需要用到哪些代码吗?
谢谢!!
我找到了一种从数据框制作正态分布图的解决方案。
#Library
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy.stats as stats
#Generating data frame
x = np.random.normal(50, 3, 1000)
source = {"Genotype": ["CV1"]*1000, "AGW": x}
df = pd.DataFrame(source)
# Calculating mean and Stdev of AGW
df_mean = np.mean(df["AGW"])
df_std = np.std(df["AGW"])
# Calculating probability density function (PDF)
pdf = stats.norm.pdf(df["AGW"].sort_values(), df_mean, df_std)
# Drawing a graph
plt.plot(df["AGW"].sort_values(), pdf)
plt.xlim([30,70])
plt.xlabel("Grain weight (mg)", size=12)
plt.ylabel("Frequency", size=12)
plt.grid(True, alpha=0.3, linestyle="--")
plt.show()
我在使用 dataframe 时遇到问题,在绘制时它显示多行,然后在您的代码中找到了解决方案。谢谢!!
- 通过在
pdf
和plt.plot
行添加.sort_values()
到df
。
pdf = stats.norm.pdf(df["AGW"].sort_values(), df_mean, df_std)
plt.plot(df["AGW"].sort_values(), pdf)