matplotlib轴具有两个比例的共享原点

时间:2019-07-20 07:04:12

标签: python matplotlib shared

Matplotlib axis with two scales shared origin

我已经尝试实现现有的堆栈流解决方案,并且我的两个x轴都未对准0。 我的代码:

def align_xaxis(ax1, v1, ax2, v2):
    """adjust ax2 xlimit so that v2 in ax2 is aligned to v1 in ax1"""
    x1, _ = ax1.transData.transform((v1, 0))
    x2, _ = ax2.transData.transform((v2, 0))
    inv = ax2.transData.inverted()
    dx, _ = inv.transform((0, 0)) - inv.transform((x1-x2, 0))
    minx, maxx = ax1.get_xlim()
    ax2.set_xlim(minx+dx, maxx+dx)  

def unrealized_profit_loss_graph(profit_loss):
    plt.style.use('ggplot');
    fig = plt.figure()
    ax1 = fig.add_subplot(111);                            
    ax2 = ax1.twiny() 
    profit_loss['total_G/l']. 
    plot(kind='barh',color=profit_loss.positive.map({True: 'g', False: 'r'}))  
    profit_loss['gain_loss_perc'].plot(kind='barh',color=profit_loss.positive.map({True: 'b', False: 'y'}))
    ax1.set_xlabel('%', fontsize=12)
    ax2.set_xlabel('$', fontsize=12);
    align_xaxis(ax1,0,ax2,0)
    plt.xlim(-5000, 20000)                              
    plt.xticks(rotation=45);
    plt.show();

我希望两个x轴都对准0。 还要显示ax1的负号和正号。

1 个答案:

答案 0 :(得分:0)

您未能提供有效的示例。不过,请尝试以下操作:将相应的轴传递到plot函数,然后尝试对齐

def unrealized_profit_loss_graph(profit_loss):
    plt.style.use('ggplot')
    fig = plt.figure()
    ax1 = fig.add_subplot(111)
    profit_loss['total_G/l'].plot(kind='barh',
                                  color=profit_loss.positive.map({True: 'g', False: 'r'}), 
                                  ax=ax1)  
    ax2 = ax1.twiny()
    profit_loss['gain_loss_perc'].plot(kind='barh',
                                       color=profit_loss.positive.map({True: 'b', False: 'y'}), 
                                       ax=ax2)

    ax1.set_xlabel('%', fontsize=12)
    ax2.set_xlabel('$', fontsize=12)
    plt.xlim(-5000, 20000)                              
    plt.xticks(rotation=45)
    align_xaxis(ax1,0,ax2,0)
    plt.show();