how to zoom in on specific overlapped data points and keepin the others ones inside the grid range
Show older comments
Hello, I have a set of data I am analyzing and I would like some help if you can. My data consist of two columns but my X column is only one point and my Y colunm is about 50 points. So when I plot it of course it's just just diff points along the Y axis versus one single point on the x axis.
Now those points are really closed to each other and what I would like to do is to label each point to their actual Channel name. But so far I tried to use the text() function an it gives me an error saying that my x and y value should be the same. I'm not sure which way to do this anymore. Keep in mind that I have the names of each data points in a file also. Can you help? Keep in mind using one x value and 50 Y values. Lets say I fix it and now the names are on top of each other. Is there a way I am space them out without affecting the location of the points.
Thanks for your help in advance!
2 Comments
Jonathan Epperl
on 19 Apr 2013
Post your code, and the error message.
Mini Me
on 19 Apr 2013
Answers (1)
Jonathan Epperl
on 19 Apr 2013
Okay, either you're not explaining well, or the solution is very simple: If the data doesn't have the same dimension, then make it.
Either, you make an array with all the channel names, then use text once:
M = [repmat('Channel ',50,1) num2str((1:50)', '%2d')];
plot(1,1:50,'s');
text(ones(50,1)+.1,1:50,M);
or you use a for-loop:
plot(1,Y,'s');
for ii=1:50
text(1+.1, Y(ii), num2str(ii,'Channel %d'));
end
Does that help?
10 Comments
Mini Me
on 19 Apr 2013
Mini Me
on 19 Apr 2013
Jonathan Epperl
on 22 Apr 2013
You could try and alternate the alignment of the labels, i.e. have the lowest label on the right, the next on the left, the next one on the right again and so on. Example:
Y = randi(300,[50 1]);
[Ys, i0] = sort(Y);
plot(1,Y,'s');
for ii=1:50
if mod(ii,2)
text(1+.1, Y(i0(ii)), num2str(ii,'Channel %d'));
else
text(1-.1, Y(i0(ii)), ...
num2str(ii,'Channel %d'),'HorizontalAlignment','Right');
end
end
Depending on whether your data is already sorted, you might be able to skip the sorting step.
That will help you, if the points aren't in clusters of 3 or more, but in that case I really don't know what a solution could look like. Lines connecting the text labels to the corresponding dots?
Image Analyst
on 24 Apr 2013
Can you upload some images, plots, screenshots, or anything to illustrate what you're talking about? Like to http://snag.gy
Jonathan Epperl
on 24 Apr 2013
I think I'm not sure anymore, what it really is you want. Maybe you do what Image Analyst suggested, and maybe you outline, what it is exactly that you want to visualize: Is it just value vs a channel name? Then what's wrong with a simple table? Or maybe a bar chart, where you have a bar for every channel? Why does it have to be boxes on a single line?
Mini Me
on 24 Apr 2013
Jonathan Epperl
on 24 Apr 2013
So you'd like some kind of magnifying glass? Maybe an inset axis might be what your are looking for: http://www.mathworks.com/matlabcentral/fileexchange/33159-inset2dabsolute
Or you could distort the y-axis, so that the scale in the center is smaller than on the edges.
I have no idea how else you would zoom in without losing the other data points.
Mini Me
on 24 Apr 2013
Categories
Find more on Annotations in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!