【问题标题】:How do I create stacked barplots / catplots with ambigious Y axis?如何创建 Y 轴不明确的堆积条形图/猫图?
【发布时间】:2020-09-20 09:02:48
【问题描述】:

我已使用此类列对数据进行分组和汇总。它们填充有中值。

name; online_days; offline_days; hybrid_days
foo; 1; 2; 0
bar; 0.5; 2.5; 0
test; 1.5; 1.5; 0

我需要画这样的东西

我尝试了sns.catplot,但它需要特定的 Y 轴,我是否希望 Y 轴为 online_daysoffline_dayshybrid_days

【问题讨论】:

    标签: python matplotlib plot bar-chart seaborn


    【解决方案1】:

    回答

    您需要在pandas.DataFrame 中组织您的数据,然后您需要使用pandas.melt 重塑此数据框,以获得这样的数据框:

    name      day type  median
     foo   online_days     1.0
     bar   online_days     0.5
    test   online_days     1.5
     foo  offline_days     2.0
     bar  offline_days     2.5
    test  offline_days     1.5
     foo   hybrid_days     0.0
     bar   hybrid_days     0.0
    test   hybrid_days     0.0
    

    最后,您可以通过seaborn.barplot() 绘制数据。

    代码

    # import
    import pandas as pd
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    # data
    df = pd.DataFrame({'name': ['foo', 'bar', 'test'],
                       'online_days': [1, 0.5, 1.5],
                       'offline_days': [2, 2.5, 1.5],
                       'hybrid_days': [0, 0, 0]})
    df = pd.melt(frame = df,
                 id_vars = 'name',
                 var_name = 'day type',
                 value_name = 'median')
    
    # plotting
    fig, ax = plt.subplots()
    
    sns.barplot(ax = ax,
                data = df,
                x = 'name',
                y = 'median',
                hue = 'day type')
    
    plt.show()
    

    输出

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 2022-08-09
      • 2020-12-27
      • 1970-01-01
      相关资源
      最近更新 更多