3

The problem I have can be described as follows: Two different datasets with two different x and y axes (lets call them t1,y1,t2, and y2), t1 and t2 can be the same.

What I need to do is to overlay/plot both plots together (i.e, not in subplots, or in subplots that are the same size and exactly overlap one another) and be able to scroll each axis independently. My goal is to be able to visually line them up to I can compare them.

What I have until not is the following:

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() 

which was taken from this stackoverflow post

Essentially what I need to do (I think) is to have two axes, completely overlapping, and with two scrollbars, on the same figure.

Any help is greatly appreciated.

Sorry for any English mistakes, ESL

1 Answer 1

3

Here's a basic example I can get working with two random datasets where you can vary the x-axis position of the two datasets independently on the same plot.

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() 

This results in the following: enter image description here

You will likely need to change the update functions to fit your actual data (mine are different than the one listed in the OP).

If you are instead interested in the having the same x-axis values but would like to vary the y-axis positions of each plot independently, you can use ax2 = ax1.twiny() and change the update functions accordingly (something like ax1.axis([xmin, xmax, pos, pos+2])).

Sign up to request clarification or add additional context in comments.

2 Comments

Thank you very much! I'll try this in a couple minutes here, much appreciated! I'll be reading up on the 'twiny()' method
Worked like a charm! twiny() is what does it I guess, I went as far as creating the second scroll bar and making the update functions, but it was moving both plots regardless of which Slider I used. Thanks a lot @wflynny

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.