在Python中,如何在一个面板内重叠有关数据框的直方图?

In Python, how to overlap histogram graphs about data frame inside one panel?

我对 Python 中一个面板内的重叠图表有疑问。

我生成了两组数字

import numpy as np
cv1 = np.random.normal(50, 4, 1000)
cv2 = np.random.normal(40, 7, 1000)


import matplotlib.pyplot as plt

plt.hist(cv1, numpy.linspace(0, 70, 100))
plt.hist(cv2, numpy.linspace(0, 70, 100))
plt.xlabel("Grain weight (mg)", size=12)
plt.ylabel("Frequency_Histogram", size=12)
plt.show()

效果很好。但是,如果数据是data frame的格式,如何做成一样的图呢?

比如我模拟我有两个不同基因型的数据集,cv1,cv2。在每个数据中,测量了 1,000 粒谷物的粒重。

cv1_data = {"Genotype": ["cv1"]*1000,"AGW": cv1}
cv1_weight = DataFrame(cv1_data)

cv2_data = {"Genotype": ["cv2"]*1000,"AGW": cv2}
cv2_weight = DataFrame(cv2_data)

然后,我想制作与上面相同的图表。所以我尝试了以下代码

plt.hist(cv1,y="AGW", numpy.linspace(0, 70, 100))
plt.hist(cv2,y="AGW", numpy.linspace(0, 70, 100))
plt.xlabel("Grain weight (mg)", size=12)
plt.ylabel("Frequency_Histogram", size=12)
plt.show()

但它不起作用。你能告诉我如何在数据框的情况下制作相同的重叠图吗?

总是,非常感谢!!!

您可以使用 python

中的 Seaborn 库来做到这一点
import numpy as np
import pandas as pd
import seaborn as sns


cv1 = np.random.normal(50, 4, 1000)
cv2 = np.random.normal(40, 7, 1000)

cv1_data = {"Genotype": ["cv1"]*1000,"AGW": cv1}
cv1_weight = pd.DataFrame(cv1_data)

cv2_data = {"Genotype": ["cv2"]*1000,"AGW": cv2}
cv2_weight = pd.DataFrame(cv2_data)

df = pd.concat([cv1_weight,cv2_weight],axis = 1)
df.columns = ['Genotype', 'cv1_AGW', 'Genotype', 'cv2_AGW']

sns.histplot(data = df[['cv1_AGW','cv2_AGW']])