【问题标题】:Stacked plots from a multi-index data来自多索引数据的堆叠图
【发布时间】:2019-05-08 23:37:47
【问题描述】:

我知道如何绘制这样的图:

               SEASON1  SEASON2  SEASON3
area                                    
A   299.0  2.0  257.0
B   13.0  33.0  198.0
C   22044.0  2.0  22.0

使用

df.plot(kind='bar', stacked=True, rot=90, edgecolor='black')
df.T.plot(kind='bar', stacked=True, rot=0, edgecolor='black')

导致:

stacked

transposed stacked

我很难为下面的df 获得相同(甚至更好看)的图,它代表原始的df,但更优雅地制作了here

【问题讨论】:

    标签: python pandas dataframe matplotlib plot


    【解决方案1】:

    您要做的是取消堆叠数据框,并更改列的名称。

    你可以这样做:

    df.unstack()
      .rename(columns = {
                "2016Q1" : "Season 1",
                "2016Q2" : "Season 2",
                "2016Q3" : "Season 3",
            })
    

    您可以在文档中找到有关 unstack 的作用以及它是如何做的示例。至于rename 方法,它需要一个映射来将你的名字从某个东西转换为其他东西。

    我没有尝试让您的示例工作,但我从上面的 unstack 文档中举了一个示例。

    index = pd.MultiIndex.from_tuples([('one', 'a'), ('one', 'b'),
                                       ('two', 'a'), ('two', 'b')])
    
    df = pd.DataFrame( np.arange(1.0, 5.0), index=index, columns=['hi'])
    print(df)
    #         hi
    # one a  1.0
    #     b  2.0
    # two a  3.0
    #     b  4.0
    
    df = df.unstack(level = -1)
           .rename(columns = {
                "a" : "Season 1",
                "b" : "Season 2"
            })
    print(df)
    #           hi         
    #     Season 1 Season 2
    # one      1.0      2.0
    # two      3.0      4.0
    

    可能有更好的方法来处理 DataFrame 上方的“hi”,但您可以 select 它,它会消失。

    print( s['hi'] )
         Season 1  Season 2
    one       1.0       2.0
    two       3.0       4.0
    

    【讨论】:

    • 甜蜜。经测试。在职的!所以我的结论是,最好的做法可能是不处理原始的多索引df 对吗?如果是这样,我会去将答案标记为已接受。
    • @KyleDickson 好吧,我没有对这个主题进行很多研究,但考虑一下,通常情节是 2D 的,而 DataFrame 是 2D 对象。多索引对于处理 2D+ 数据很有用。我不认为 pandas 多索引可以处理 3D 级别的图。我认为这与最佳实践或其他任何东西无关。
    • @KyleDickson 如果您查看this answer,您会发现您可以决定在不同的轴上绘制多索引。这将是一个不同的选择。 :) 在这里,您不应该考虑最佳实践,而是考虑可能性:我可以将 3D 对象插入 2D 绘图仪吗? :p
    猜你喜欢
    • 2013-11-09
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2016-09-01
    • 2020-02-18
    • 2021-04-24
    相关资源
    最近更新 更多