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

当所有值都为正值时绘制面积图比例

  •  1
  • piRSquared  · 技术社区  · 7 年前

    我正在尝试生成一个混合了 area line chart的图表。考虑我的数据帧

    df=pd.dataframe([range(1,4)]*5,columns=list('abc').assign(b=lambda d:-d.b).cumsum())
    < /代码> 
    
    

    还有我的图表

    df.c.plot.area(stacked=false)
    df.a.图()。
    df.b.图()。
    < /代码> 
    
    

    请注意,否定序列不会出现。
    现在假设我做了一个系列的条目ca负值

    df.loc[3,'c']=-1
    < /代码> 
    
    

    再次策划

    df.c.plot.area(stacked=false)
    df.a.图()。
    df.b.图()。
    < /代码> 
    
    

    这是我所期望的。但是,我确实有序列数据cthat is all one sign.我如何绘制它,使规模不会为我的另一个系列毁了?


    麦克维

    弄乱了 将熊猫作为PD导入 df=pd.dataframe([范围(1,4)]*5,columns=list('abc')).assign(b=lambda d:-d.b).cumsum()) df.c.plot.area(叠加=假) df.a.图()。 df.b.图()。 < /代码>
    correct but I have to put false data
    将熊猫作为PD导入
    
    df=pd.dataframe([范围(1,4)]*5,columns=list('abc')).assign(b=lambda d:-d.b).cumsum())
    df.loc[3,'c']=-1
    
    df.c.plot.area(叠加=假)
    df.a.图()。
    df.b.图()。
    < /代码> <

    还有我的图表

    df.C.plot.area(stacked=False)
    df.A.plot()
    df.B.plot()
    

    enter image description here

    请注意,负数序列不会出现。
    现在假设我做了系列的一个条目C负值

    df.loc[3, 'C'] = -1
    

    再次策划

    df.c.plot.area(叠加=假)
    df.a.图()。
    df.b.图()。
    

    enter image description here

    这是我所期望的。但是,我确实有系列的数据C这是一个标志。我如何绘制它,使规模不会为我的另一个系列毁了?


    麦克维尔

    # messed up
    import pandas as pd
    
    df = pd.DataFrame([range(1, 4)] * 5, columns=list('ABC')).assign(B=lambda d: -d.B).cumsum()
    
    df.C.plot.area(stacked=False)
    df.A.plot()
    df.B.plot()
    

    # correct but I have to put false data
    import pandas as pd
    
    df = pd.DataFrame([range(1, 4)] * 5, columns=list('ABC')).assign(B=lambda d: -d.B).cumsum()
    df.loc[3, 'C'] = -1
    
    df.C.plot.area(stacked=False)
    df.A.plot()
    df.B.plot()
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   Mr. T Andres Pinzon    7 年前

    我不知道,为什么会发生此错误。 *但是您可以强制 autoscale 。如果只想自动缩放一个轴,可以指定它:

    不再混乱 将熊猫作为PD导入 df=pd.dataframe([范围(1,4)]*5,columns=list('abc')).assign(b=lambda d:-d.b).cumsum()) df.c.plot.area(叠加=假) df.a.图()。 df.b.图()。 plt.自动缩放(真,轴=“Y”) 请显示()) < /代码>

    输出:

    *正如@importanceofbeingernest在注释中指出的那样,这不是错误,而是区域图所需的行为,而区域图与此处的线图意外地发生冲突。

    . 如果只想自动缩放一个轴,可以指定它:

    #not messed up anymore
    import pandas as pd
    
    df = pd.DataFrame([range(1, 4)] * 5, columns=list('ABC')).assign(B=lambda d: -d.B).cumsum()
    
    df.C.plot.area(stacked=False)
    df.A.plot()
    df.B.plot()
    
    plt.autoscale(True, axis = "y")
    plt.show()
    

    输出:
    enter image description here

    *正如@importanceofbeingernest在评论中指出的那样,这不是一个bug,而是区域图所需的行为,不幸地与此处的线图相冲突。

        2
  •  1
  •   DrM    7 年前

    下面是一个示例,演示如何显式设置限制:

    import matplotlib.pyplot as plt
    import pandas as pd
    
    df = pd.DataFrame([range(1, 4)] * 5, columns=list('ABC')).assign(B=lambda d: -d.B).cumsum()
    
    df.C.plot.area(stacked=False)
    df.A.plot()
    df.B.plot()
    
    ymin, ymax = plt.ylim()
    
    plt.ylim( [-ymax,ymax] )
    
    plt.show()
    

    在上面,我们检索轴范围,然后设置下限以匹配上限。你可以用任何合适的方式来阐述这个问题。