Получение тиков на одной горизонтальной сетке для участков с разным масштабом - PullRequest
0 голосов
/ 30 марта 2020

Этот сайт хорошо описывает, как нарисовать две линии с разными масштабами на одном графике. Однако отметки y не выровнены, как вы можете видеть на следующем рисунке, если я нарисую горизонтальную сетку поперек. enter image description here

Есть ли способ добавить тики, чтобы они совпали (например, 5000 слева совмещено с 0,50 справа и т. Д. c.)?

1 Ответ

2 голосов
/ 31 марта 2020

Можно выровнять правые тики, установив их ylims в соответствующие ylims левого:

ymin1, ymax1 = ax1.get_ylim()
ax2.set_ylim(ymin1 / 10000, ymax1 / 10000)

Или установить ylims обеих осей в самый широкий диапазон:

import numpy as np
import matplotlib.pyplot as plt

# Create some mock data
t = np.arange(0.01, 10.0, 0.01)
data1 = np.exp(t)
data2 = np.sin(2 * np.pi * t)

fig, ax1 = plt.subplots()

color = 'tab:red'
ax1.set_xlabel('time (s)')
ax1.set_ylabel('exp', color=color)
ax1.plot(t, data1, color=color)
ax1.tick_params(axis='y', labelcolor=color)

ax2 = ax1.twinx()  # instantiate a second axes that shares the same x-axis

color = 'tab:blue'
ax2.set_ylabel('sin', color=color)  # we already handled the x-label with ax1
ax2.plot(t, data2, color=color)
ax2.tick_params(axis='y', labelcolor=color)

ymin1, ymax1 = ax1.get_ylim()
ymin2, ymax2 = ax2.get_ylim()
ymin1 = min(ymin1, ymin2 * 10000)
ymax1 = max(ymax1, ymax2 * 10000)
ax1.set_ylim(ymin1, ymax1)
ax2.set_ylim(ymin1 / 10000, ymax1 / 10000)

ax1.grid(True, axis='y')
fig.tight_layout()  # otherwise the right y-label is slightly clipped
plt.show()

result

...