Я пытаюсь дублировать ось y так, чтобы она отображалась как на левой, так и на правой стороне моего графика (одинаковая шкала с каждой стороны). Я верю, что правильный способ сделать это - с помощью близкого метода, но я не могу обойти его. Вот мой текущий код:Создание одинаковых осей с matplotlib 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
который возвращает ошибку при вынесший dataframe:
AttributeError: 'BarContainer' object has no attribute 'twiny'
Посмотрев в него немного дальше, я считаю, что использование host/parasite methods также будет работать, но я m немного потерял, как я мог поместить его в мой текущий код. Совет будет с благодарностью оценен!
Awesome, веселит @cel. Он выбивает ярлык оси ylab, предположим, что я должен назвать это по-другому? –
@s_boardman, Похоже, что вы не установили метку в своем коде. Добавление 'ax.set_ylabel (ylab)', похоже, работает нормально. Вы не хотите иметь это с обеих сторон, не так ли? – cel
этот код действительно работал для предыдущей версии. Но использование «ax.set_ylabel()» частично решает проблему для меня. Еще раз спасибо! - Да, обе стороны были бы идеальны, при необходимости могут справиться с левыми. –