MATLAB Matlab Plotting: Move Horizontal Line Over Graph Without Re-Plotting

  • Thread starter Thread starter JohnSimpson
  • Start date Start date
  • Tags Tags
    Matlab Plotting
AI Thread Summary
To plot a large dataset in a GUI while allowing a user-controlled horizontal line to move dynamically without re-plotting the dataset, utilize the 'erase' property in your plotting commands. Set the 'erase' property of the main dataset to 'none' so it remains visible when the line is moved. For the horizontal line, set its 'erase' property to 'normal' to ensure it updates correctly. Use the `set` function to adjust the line's position based on user input, and consider using `drawnow` to refresh the display as needed. This approach minimizes the need for re-plotting the entire dataset, enhancing performance and user experience.
JohnSimpson
Messages
89
Reaction score
0
In my GUI I'm plotting a fairly large amount of data in an axes, and then plotting a horizontal line overtop that the user can control the vertical position of. Is there a way I can have the first plotted graph (the large amount of data) always be behind the line I am plotting overtop, and have the user be able to dynamically move the line up and down the axes without having to re-plot both graphs every time the user wants to move the horizontal line?

For clarity, here's a picture

http://img229.imageshack.us/my.php?image=exampleya8.jpg

Again, I want the user to be able to dynamically move the line up and down without altering the blue signal (because it takes a while to re-plot the blue signal). Suggestions?
 
Physics news on Phys.org
Bump!
 
Gonna give it one last shot
 
Ok, I don't remember exactly how to do this, but I believe it has something to do with the 'erase' property when drawing.

Check out this link:
http://www.mathworks.com/access/hel...-us&q=matlab+plotting+erase&ie=UTF-8&oe=UTF-8

Look at the part:
Erase Modes
...
none — The object is not erased when it is moved.
...


basically you do something like:
Code:
keep_me  = line('color','b','erase','none');
move_me = line('color','r','erase','normal'); 

keepX = [0 1 2 3 4];
keepY = [0 1 2 3 4];
set(keep_me, 'xdata', keepX, 'ydata', keepY);

moveX = [0 1 2 3 4];
moveY = [1 1 1 1 1];

set(move_me, 'xdata', moveX, 'ydata', moveY);
drawnow;

pause;

moveY = [2 2 2 2 2];

set(move_me, 'xdata', moveX, 'ydata', moveY);
drawnow;


Something like that... treat that as pseudo code cause I'm trying to remember off the top of my head. I don't remember exactly if you need that drawnow in there, or (to be honest) when to use the drawnow.
 
Back
Top