代码之家  ›  专栏  ›  技术社区  ›  johnchase

如何用熊猫绘制垂直面积图

  •  4
  • johnchase  · 技术社区  · 8 年前

    有没有一种直接的方法来绘制一个使用熊猫的区域图,但垂直方向的图?

    例如,水平地绘制一个区域图,我可以做到这一点:

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
    df.plot(kind='area');
    

    enter image description here

    我可以垂直地绘制一个条形图。 'barh'

    df.plot(kind='barh');
    

    enter image description here

    但我无法找到一个直截了当的方法来获得一个区域图垂直。

    2 回复  |  直到 8 年前
        1
  •  5
  •   ImportanceOfBeingErnest    8 年前

    pandas不提供垂直堆栈图的原因是matplotlib stackplot 仅适用于水平堆栈。

    然而,stackplot最终只是一个填充的线条图。所以你可以用 fill_betweenx() .

    import pandas as pd
    import numpy as np; np.random.rand(42)
    import matplotlib.pyplot as plt
    
    df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
    
    fig, ax = plt.subplots()
    
    data = np.cumsum(df.values, axis=1)
    for i, col in enumerate(df.columns):
        ax.fill_betweenx(df.index, data[:,i], label=col, zorder=-i)
    ax.margins(y=0)
    ax.set_xlim(0, None)
    ax.set_axisbelow(False)
    
    ax.legend()
    
    
    plt.show()
    

    enter image description here

        2
  •  1
  •   phi    8 年前

    (应该有更好的解决方案)

    绘图-旋转90-垂直反射

    import matplotlib.pyplot as plt
    from matplotlib import pyplot, transforms
    
    df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
    base = plt.gca().transData
    rot = transforms.Affine2D().rotate_deg(90)
    reflect_vertical = transforms.Affine2D(np.array([[1, 0, 0], [0, -1, 0], [0, 0, 1]]))
    df.plot(kind='area', transform= reflect_vertical + rot + base, ax=plt.gca(), xlim=(0, 3))
    plt.gca().set_aspect(0.5)
    

    enter image description here