У меня есть два набора массивов x1, y1, t1
и x2, y2, t1
- x
data, y
data и измерение времени.
Я хотел бы представить два этих набора в виде линий с time в качестве аргумента x
в plot()
, чтобы линии были выровнены относительно приоритета времени событий.
Однако я также хотел бы видеть соответствующие x1
и x2
на графике в форме xlabels (скажем, в верхней и нижней части графика), а также иметь двашкалы для значений y
(т.е. слева и справа от рисунка).
import numpy as np
t1 = np.linspace(0, 10, 10)
y1 = np.arange(10)
x1 = (np.cumsum(np.random.rand(10)) * 1000000000).astype(int)
x1 = (x1 / 100000).astype(int) * 10
x2 = (np.cumsum(np.random.rand(10)) * 1000000000).astype(int)
x2 = (x2 / 1000000).astype(int)
y2 = 2 * np.arange(10)
t2 = np.linspace(0, 10, 10) + 2
from matplotlib import pyplot as plt
fig, ax1 = plt.subplots()
ax1.plot(t1, y1)
ax1.set_ylabel("y1 label")
ax1.set_xticklabels(x1)
ax1.set_xlabel("x1 label")
ax2 = ax1.twinx()
ax2.plot(t2, y2, c='r')
ax2.set_ylabel("y2 label")
ax3 = ax2.twiny()
ax3.xaxis.set_ticks_position('top')
ax3.set_xticklabels(x2);
ax3.set_xlabel("x2 label")
Код выдает
, что хорошо, но имеет две проблемы:
xlabels
не согласованы с данными: синийлиния на графике начинается с x1 ticklabel 104500
, в то время как x1[0] = 29380
. - я не могу применить формат
sci
для тиков x1
и x2
, то есть линию
ax1.ticklabel_format(style='sci', axis='x', scilimits=(0,0))
завершается с ошибкой This method only works with the ScalarFormatter
, что является разумным, поскольку я заменил метки галочек, а не галочки самих .С другой стороны, я не могу назначить x1
на xticks
, так как это изменит пределы xaxis.
Как я мог преодолеть две эти проблемы?