叠加绘图并独立滚动的matplotlib实现

3
我可以描述我遇到的问题如下: 有两个不同的数据集,分别有两个不同的x轴和y轴(我们称其为t1,y1,t2和y2),t1和t2可能相同。
我需要做的是将两个图表叠加/绘制在一起(即不是在子图中,或在完全重叠的子图中),并能够独立滚动每个轴。我的目标是能够将它们视觉上对齐以便我可以进行比较。
目前为止,我拥有以下内容:
import numpy as np
from matplotlib import pyplot as plt
from matplotlib.widgets import Slider
dArray = np.genfromtxt("t5_24.csv",delimiter=',');
y1 = dArray[:,2];
y2 = dArray[:,3];
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.25)
t = np.linspace(0,len(temp1),len(temp1))
p1 = plt.plot(t,y1,t,y2)


axcolor = 'lightgoldenrodyellow'
axpos = plt.axes([0.2, 0.1, 0.65, 0.03], axisbg=axcolor)

spos = Slider(axpos, 'Pos', 0.1, len(t))

def update(val):
    pos = spos.val
#    ax.xlim(pos,pos+30*60)
    ax.axis([pos,pos+120*60,0,500])
    fig.canvas.draw_idle()

spos.on_changed(update)

plt.show()

这段内容来源于stackoverflow的一个帖子

我需要做的事情(我认为)是在同一张图上有两个完全重叠的轴,并且有两个滚动条。

非常感谢任何帮助。

对于任何英语错误,表示抱歉,因为我是ESL。

1个回答

3

这是一个基本的例子,我可以使用两个随机数据集进行工作,在同一图中可以独立地改变两个数据集的x轴位置。

import matplotlib.pyplot as plt
from matplotlib.widgets import Slider

t = np.linspace(0, 10, 101)
y1, y2 = np.random.rand(2, 101)

fig, ax1 = plt.subplots()
ax2 = ax1.twiny()

fig.subplots_adjust(bottom=0.25)

ax1_pos = fig.add_axes([0.2, 0.1, 0.65, 0.03])
ax2_pos = fig.add_axes([0.2, 0.05, 0.65, 0.03])

s1 = Slider(ax1_pos, 'Pos1', 0.1, len(x))
s2 = Slider(ax2_pos, 'Pos2', 0.1, len(x))

def update1(v):
    pos = s1.val
    ax1.axis([pos,pos+2,0,1])
    fig.canvas.draw_idle()

def update2(v):
    pos = s2.val
    ax2.axis([pos,pos+2,0,1])
    fig.canvas.draw_idle()

s1.on_changed(update1)
s2.on_changed(update2)

ax1.plot(t, y1, 'b-')
ax2.plot(t, y2, 'r-')
plt.show()

这将导致以下结果:enter image description here 您可能需要更改update函数以适应实际数据(我的数据与OP中列出的不同)。
如果您想要相同的x轴值,但希望独立地改变每个图的y轴位置,则可以使用ax2 = ax1.twiny()并相应地更改更新函数(例如ax1.axis([xmin,xmax,pos,pos+2]))。

非常感谢!我会在几分钟内尝试这个方法,非常感激!我将阅读有关'twiny()'方法的相关资料。 - robotHamster
运行得非常好!我猜twiny()是它的关键,我甚至创建了第二个滚动条并制作了更新函数,但无论我使用哪个滑块,它都会移动两个图表。非常感谢@wflynny。 - robotHamster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接