Выравнивание / поворот текстовых меток по оси x в matplotlib с 3 графиками

Как я могу выровнять текстовые метки с тикерами x на графике здесь? Я использую host.set_xticklabels (метки, rotation = 'vertical'), но это, похоже, не работает. Мои ярлыки – это предложения, а некоторые могут быть меньше / больше, чем другие, например «Мумия возвращает часть 2». Как заполнить пробел ниже оси x, чтобы это было уместно?

введите описание изображения здесь

from mpl_toolkits.axes_grid1 import host_subplot import mpl_toolkits.axisartist as AA import matplotlib.pyplot as plt import pandas as pd import numpy as np path='/home/project/df.csv' df=pd.read_csv(path,sep=',',header='infer') xs =range(0,101) ys =list(df['B'].ix[0:100]) zs=list(df['C'].ix[0:100]) ws=list(df['D'].ix[0:100]) if 1: host = host_subplot(111, axes_class=AA.Axes) p1, = host.plot(xs, ys, label='B') plt.subplots_adjust(right=0.75) par1 = host.twinx() par2 = host.twinx() offset = 60 new_fixed_axis = par2.get_grid_helper().new_fixed_axis par2.axis["right"] = new_fixed_axis(loc="right", axes=par2, offset=(offset, 0)) par2.axis["right"].toggle(all=True) host.set_xlim(min(xs), max(xs)) host.set_ylim(100, max(ys)) host.set_xlabel("A") host.set_ylabel("B") par1.set_ylabel("C") par2.set_ylabel("D") p2, = par1.plot(xs, ws, label='C',color='red') p3, = par2.plot(xs, zs, label='D',color='green') for tl in par1.get_yticklabels(): tl.set_color('red') for tl in par2.get_yticklabels(): tl.set_color('green') for tl in par1.get_yticklabels(): tl.set_color('r') for tl in par2.get_yticklabels(): tl.set_color('g') host.legend() host.axis["left"].label.set_color(p1.get_color()) par1.axis["right"].label.set_color(p2.get_color()) par2.axis["right"].label.set_color(p3.get_color()) start, end, stepsize=0,len(df)-1,3 host.xaxis.set_ticks(np.arange(start, end, stepsize)) labels=list(df['A'])[0::stepsize] host.set_xticklabels(labels,rotation='vertical') plt.tight_layout() plt.draw() plt.show() 

Мне нужно выровнять «черную» массу, как на картинке.

Я попробовал предложения в примере здесь, когда python вращает значения на xaxis, чтобы не перекрывать – plt.xticks (x, labels, rotation = 'vertical') и т. Д., Но это не сработало.

Изменить – Из приведенного ниже комментария Kazemakaze вот что я пробовал -: f, host = plt.subplots () #host = host_subplot (111, axes_class = AA.Axes), но я должен также адаптировать остальную часть кода. Можете ли вы привести пример с осью doublex, где это работает?

Я адаптирую свой код к этой вторичной оси с помощью doublex (): как добавить к легенде? и теперь вращение работает, нужно хотя бы несколько указателей на вторичной оси.

Вот как я это решил: проблема с host_subplot была действительно с host_subplot и она работает правильно при использовании plt.subplot

введите описание изображения здесь

 import matplotlib.pyplot as plt import pandas as pd import numpy as np path='/home/project/df.csv' df=pd.read_csv(path,sep=',',header='infer') xs =range(0,101) ys =list(df['B'].ix[0:100]) zs=list(df['C'].ix[0:100]) ws=list(df['D'].ix[0:100]) def make_patch_spines_invisible(ax): ax.set_frame_on(True) ax.patch.set_visible(False) for sp in ax.spines.itervalues(): sp.set_visible(False) def three_way_plot(xs,ys,ws,zs,category): fig, host = plt.subplots() fig.subplots_adjust(right=0.6) par1 = host.twinx() par2 = host.twinx() par2.spines["right"].set_position(("axes", 1.1)) p1, = host.plot(xs, ys, "blue", linewidth=2.0, label="B") p2, = par1.plot(xs, ws, "r-", label="C") p3, = par2.plot(xs, zs, "g-", label="D") host.set_xlim(min(xs), max(xs)) host.set_ylim(min(ys), max(ys) + 200) par1.set_ylim(min(ws), max(ws) + 200) par2.set_ylim(min(zs), max(zs)) host.set_xlabel("A", fontsize=14) host.set_ylabel("B", fontsize=14) par1.set_ylabel("C", fontsize=14) par2.set_ylabel("D", fontsize=14) host.yaxis.label.set_color(p1.get_color()) par1.yaxis.label.set_color(p2.get_color()) par2.yaxis.label.set_color(p3.get_color()) lines = [p1, p2, p3] labels = ["mary had a little lamb","The mummy returns","Die another day","Welcome back"]*25 start, end, step_size = 0, len(df) - 1, 4 host.set_xticks(np.arange(start, end, step_size)) host.set_xticklabels(labels, rotation='vertical', fontsize=10) host.legend(lines, [l.get_label() for l in lines]) plt.tight_layout() plt.show() three_way_plot(xs,ys,ws,zs,"category") 

Конечно, я замаскировал истинные метки данных.