Как выровнять планку и строку в matplotlib на двух диаграммах оси y?

У меня есть pandas df, как показано ниже:

>>> df
                   sales  net_pft  sales_gr  net_pft_gr
STK_ID RPT_Date                                        
600809 20120331  22.1401   4.9253    0.1824     -0.0268
       20120630  38.1565   7.8684    0.3181      0.1947
       20120930  52.5098  12.4338    0.4735      0.7573
       20121231  64.7876  13.2731    0.4435      0.7005
       20130331  27.9517   7.5182    0.2625      0.5264
       20130630  40.6460   9.8572    0.0652      0.2528
       20130930  53.0501  11.8605    0.0103     -0.0461

Затем df[['sales','net_pft']].unstack('STK_ID').plot(kind='bar', use_index=True) создайте гистограмму.

И df[['sales_gr','net_pft_gr']].plot(kind='line', use_index=True) создать линейную диаграмму:

Теперь я хочу объединить их в диаграмму из двух у-осей, используя doublex().

import matplotlib.pyplot as plt
fig = plt.figure()
ax = df[['sales','net_pft']].unstack('STK_ID').plot(kind='bar', use_index=True)
ax2 = ax.twinx()
ax2.plot(df[['sales_gr','net_pft_gr']].values, linestyle='-', marker='o', linewidth=2.0)

Результат выглядит следующим образом: enter image description here

Мои проблемы:

  • Как переместить линию для выравнивания с полосой на тех же х-тикерах?
  • Как разрешить выровнять левую и правую кнопки y_axis в одной строке?

Ответ 1

Просто измените окончательную строку на:

ax2.plot(ax.get_xticks(),df[['sales_gr','net_pft_gr']].values, linestyle='-', marker='o', linewidth=2.0)

Все будет установлено.

enter image description here

Я не совсем понимаю ваш второй вопрос. Ось 1-й и 2-й оси имеет разный масштаб, что вы подразумеваете, выровняя их по одной линии? Они не могут быть выровнены по одной и той же линии сетки (да, вы можете, но правая ось будет выглядеть уродливой, имея значения как 0,687 и аналогичные). В любом случае, вы можете:

ax.set_ylim((-10, 80.))

чтобы выровнять их, и график теперь выглядит уродливым:

enter image description here