Две строки разделяют невидимые xdata в matplotlib с разными xticks - PullRequest
1 голос
/ 03 апреля 2019

У меня есть два набора массивов 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")

Код выдает enter image description here, что хорошо, но имеет две проблемы:

  1. xlabels не согласованы с данными: синийлиния на графике начинается с x1 ticklabel 104500, в то время как x1[0] = 29380.
  2. я не могу применить формат sci для тиков x1 и x2, то есть линию
ax1.ticklabel_format(style='sci', axis='x', scilimits=(0,0))  

завершается с ошибкой This method only works with the ScalarFormatter, что является разумным, поскольку я заменил метки галочек, а не галочки самих .С другой стороны, я не могу назначить x1 на xticks, так как это изменит пределы xaxis.

Как я мог преодолеть две эти проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...