Python matplotlib图形中的链接时间轴(x轴)

Python matplotlib图形中的链接时间轴(x轴),python,matplotlib,figure,Python,Matplotlib,Figure,这是基于生成第二个x轴,如前一篇文章所述: 以下代码用于生成具有两个x轴的绘图,这两个x轴表示相同数据的两个不同时间单位:相对时间(rel\u time)和绝对时间(abs\u time)。虽然上述方法很好地生成了两个轴,但它们之间的数据比例不同 如何生成具有链接的两个x轴的绘图?也就是说,绘制在两个轴上的数据应彼此对齐 此外,是否有一种方法可以在不绘制两次数据(y)的情况下执行此操作?最后,数据应该对齐,因此第二个图正好在那里生成一个新轴 代码如下: # Based on question:

这是基于生成第二个x轴,如前一篇文章所述:

以下代码用于生成具有两个x轴的绘图,这两个x轴表示相同数据的两个不同时间单位:相对时间(
rel\u time
)和绝对时间(
abs\u time
)。虽然上述方法很好地生成了两个轴,但它们之间的数据比例不同

如何生成具有链接的两个x轴的绘图?也就是说,绘制在两个轴上的数据应彼此对齐

此外,是否有一种方法可以在不绘制两次数据(
y
)的情况下执行此操作?最后,数据应该对齐,因此第二个图正好在那里生成一个新轴

代码如下:

# Based on question:
# https://stackoverflow.com/questions/7761778/matplotlib-adding-second-axes-with-transparent-background
import time
import numpy as np
import matplotlib.pyplot as plt

# Plot Data
rel_time = np.arange(-10.0, 40)  # seconds
abs_time = rel_time + time.time()  # epoch time
y = np.array([1.1, 1.2, 1.2, 1.1, 1.2, 1.1, 1.3, 1.3, 1.2, 1.1, 1.4, 1.7, 
              2.5, 2.6, 3.5, 4, 4.3, 4.8, 5, 4.9, 5.3, 5.2, 5.5, 5.1, 
              5.4, 5.6, 5.1, 6, 6.2, 6.2, 5.5, 6.1, 5.4, 6.3, 6.2, 6.5,
              6.3, 6.1, 6.5, 6.6, 6.1, 6.6, 6.5, 6.4, 6.6, 6.5, 6.2, 6.6,
              6.4, 6.8])  # Arbitrary data

fig = plt.figure()
fig.subplots_adjust(bottom=0.25)  # space on the bottom for second time axis

host = fig.add_subplot(111)  # setup plot

p1 = host.plot(rel_time, y, 'b-')  # plot data vs relative time
host.set_xlabel("Relative Time [sec]")
host.set_ylabel("DATA")

newax = host.twiny()  # create new axis
newax.set_frame_on(True)
newax.patch.set_visible(False)
newax.xaxis.set_ticks_position('bottom')
newax.xaxis.set_label_position('bottom')
newax.spines['bottom'].set_position(('outward', 50))
newax.plot(abs_time, y, 'k-')  # plot data vs relative time
newax.set_xlabel("Absolute Time [Epoch sec]")

plt.show()
生成x轴不匹配的timeseries绘图:
您需要指定x轴的限制。如果添加这些行,它将执行以下操作:

host.set_xlim(rel_time[0],rel_time[-1])
newax.set_xlim(abs_time[0],abs_time[-1])
绘制的两条曲线:


如果您不想绘制两次数据,只需删除
newax.plot()
直线。

因此您想要完全相同的图形,但没有蓝色曲线?我希望第二个轴(绝对时间)与第一个轴(相对时间)完全对齐。如果是这样,蓝色曲线将隐藏在黑色下方。当曲线重叠时,我看不到显式绘制其中一条曲线的意义(比如蓝色曲线)。我还有其他数据集,其中axis之间的不匹配更为严重。这正是我所寻找的。如果我想在timeseries数据的范围之外进行绘图(例如,在时间数据的任一侧保留空白),我想我必须在一个时间轴中显式地表示时间,然后将时间端点转换为另一个时基。除非有更好的方法?@BFTM-Great:),是的,你是对的,只需将
(rel\u time[0],rel\u time[-1])
更改为
(rel\u time[0]-1,rel\u time[-1]+1)
。。