Установить пользовательские метки даты ytick в обеих осях Y - PullRequest
1 голос
/ 03 июля 2019

По мотивам ответа , приведенного здесь , я хочу показать очень похожий график с начальной датой на левой оси y и конечной датой на правой оси y для каждогоline.

До сих пор я пытался сохранить даты начала и окончания в списке и использовал twinx() и set_yticks(), но это не сработало.Приведенный ниже код отображает тот же график в ссылке (за исключением легенды), но он не изменяет оси Y.

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from datetime import datetime

ts = pd.date_range(end='2016-03-31', periods=250, freq='D')
np.random.seed([3, 1415])
a = np.random.choice(range(100), size=(2,10))
ranges = pd.DataFrame((a + np.array([[0], [150]])), columns=list('abcdefghij'))

df = pd.DataFrame(index=ts)
count = len(ranges.columns)
left_axis = []
right_axis = []
for colname, column in ranges.iteritems():
    start_, end_ = column
    df.loc[ts[start_] : ts[end_], colname] = count
    left_axis.append(ts[start_])
    right_axis.append(ts[end_])
    count -= 1

fig, ax1 = plt.subplots()
ax1.plot(df)
ax1.set_yticks(range(10, 0, -1), left_axis)

ax2 = ax1.twinx()
ax2.set_yticks(range(10, 0, -1), right_axis)
plt.legend([])
plt.show()

Любая помощь приветствуется.Заранее большое спасибо!

1 Ответ

1 голос
/ 03 июля 2019

Вам нужно использовать

ax.set_yticks(ticks)
ax.set_yticklabels(labels)

также, чтобы убедиться, что отметки справа соответствуют отметкам слева, вы должны отрегулировать ylim, чтобы они были одинаковыми на обеих осях

(...)
fig, ax1 = plt.subplots()
ax1.plot(df)
ax1.set_yticks(range(10, 0, -1))
ax1.set_yticklabels(left_axis)

ax2 = ax1.twinx()
ax2.set_yticks(range(10, 0, -1))
ax2.set_yticklabels(right_axis)
ax2.set_ylim(ax1.get_ylim())
plt.legend([])
fig.tight_layout()
plt.show()

enter image description here

...