通过遍历df中的簇显示堆叠的直方图

时间:2019-04-19 16:54:01

标签: python matplotlib histogram

我有一个数据集,其中包括棒球运动员的所有击球平均值。我将此数据集中的每个玩家随机分配到一个集群。现在,我想在堆叠的直方图中直观地显示每个聚类。我使用以下内容:

import matplotlib.pyplot as plt

def chart(k=2):
    x = np.arange(0, 0.4, 0.001)
    for j in range(k):
        cluster = df.loc[df['cluster'] == j].reset_index()
        plt.hist(cluster['Average'], bins=50, density=1, stacked=True)
    plt.xlim(0, 0.4)
    plt.xlabel('Batting Average')
    plt.ylabel('Density')
    plt.show()

这给了我以下输出:    enter image description here

但是,我希望看到以下内容:

enter image description here

我通过将数据集划分为“硬编码”来创建此图表。理想情况下,我想通过创建循环来动态地执行此操作。我还如何添加带有群集名称的图例并为每个群集指定颜色?再次全部循环。例如, K 也可以是10。 预先感谢

1 个答案:

答案 0 :(得分:1)

不提供数据和Minimal, Complete, and Verifiable example  在问一个问题之前先问别人,很难回答您的问题。这是您下次应该记住的事情。不过,这是一种对您有用的方法。这个想法是创建一个轴对象ax并将其传递以在同一图形上绘制两个直方图。然后,您可以在绘制所有内容后在功能之外修改标签,限制等。

P.S:正如Paul H在下面的评论中指出的那样,DataFrame df和列名也应作为参数传递给图表函数,以使其更加健壮

import matplotlib.pyplot as plt

def chart(ax1, k=2):
    x = np.arange(0, 0.4, 0.001)
    for j in range(k):
        cluster = df.loc[df['cluster'] == j].reset_index()
        ax1.hist(cluster['Average'], bins=50, density=1, stacked=True)
    return ax1

fig, ax = plt.subplots()

ax = chart(ax, k=2)    
plt.xlim(0, 0.4)
plt.xlabel('Batting Average')
plt.ylabel('Density')
plt.show()