【问题标题】:Display stacked histogram by looping over clusters within df通过遍历 df 内的集群来显示堆叠直方图
【发布时间】:2019-04-19 16:54:01
【问题描述】:

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

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()

这给了我以下输出:

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

我通过划分“硬编码”数据集来创建此图表。理想情况下,我想通过创建一个循环来动态地做到这一点。我怎样才能添加一个带有集群名称的图例并为每个集群指定颜色?再次循环。 K 例如也可以是 10。 提前致谢

【问题讨论】:

    标签: python matplotlib histogram


    【解决方案1】:

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

    P.S:正如 Paul H 在下面的 cmets 中指出的那样,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()
    

    【讨论】:

    • 只是一个想法:数据框和列名应该是chart函数的参数
    • @PaulH:你是对的。我将把它留给 OP 来处理。不过,我会用文字将您的建议添加到答案中。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 2015-11-28
    • 2016-12-19
    • 2018-12-09
    • 1970-01-01
    相关资源
    最近更新 更多