使用matplotlib twiny创建相同的轴

时间:2015-01-27 11:56:09

标签: python matplotlib

我试图复制我的y轴,使其出现在我的图表的左侧和右侧(每侧都有相同的比例)。我相信这样做的正确方法是通过twiny方法,但不能让我的头围绕它。这是我目前的代码:

import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

def bar(data_df,
    colour_df=None,
        method='default',
        ret_obj=False):
    height = len(data_df.columns)*4
    width = len(data_df.index)/4
    ind = np.arange(len(data_df.index))
    dat = data_df[data_df.columns[0]]
    bar_width = 0.85
    fig, ax = plt.subplots(figsize=(width,height))
    ax1 = ax.bar(ind,dat,bar_width,color='y',log=True)
    ax2 = ax1.twiny()
    ax.tick_params(bottom='off', top='off', left='on', right='on') 
    plt.xticks(np.arange(len(data_df.index)) + bar_width, 
               data_df.index, rotation=67,ha='right')
    ylab = 'Region Length (base pairs, log10)'
    figname = 'bar' + method + '.png'
    if ret_obj==False:
        fig.savefig(figname,bbox_inches='tight',dpi=250)
        print "Output figure:", figname
        plt.close()
    if ret_obj==True:
        return fig

传递数据帧时返回以下错误:

AttributeError: 'BarContainer' object has no attribute 'twiny'

进一步研究一下后,我相信使用host/parasite methods也会有效,但我有点失去了如何将它融入我当前的代码中。建议将不胜感激!

1 个答案:

答案 0 :(得分:1)

在这种情况下,您不必使用twiny。它足以在所有方面绘制标签:

bars = ax.bar(ind,dat,bar_width,color='y',log=True)
ax.tick_params(axis='both', which='both', labelbottom=True, labeltop=True, 
               labelleft=True, labelright=True)

我得到了关于虚拟数据的结果:

df = pd.DataFrame({"a": np.logspace(1,10,20)})
bar(df)

plot