Plot out of cell array with attributes
显示 更早的评论
Hi, at first here is my code:
x = zeros(1979,1);
y = zeros(1979,1);
B = cell(1979,1);
for i = 1 : 1979
x(i) = i;
y(i) = i;
if i > 150
B(i,1) = {'bs'};
else
B(i,1) = {'ks'};
end
end
plot(x,y,B(:));
so the x vector contains my x-coordinates and the y-vector my y-coordinates. Now for example I want to plot the first 150 as a blue square and the others should be a black square.
I now that I can do it with a for-loop but in my real case the attributes depend on a a lot of things. So I want to create a cell array which contains the color and the appearance of the marker for each coordinates and to plot it automatically without a for-loop.
I hope you understand what I want to do :)
7 个评论
Nick Counts
2016-11-18
Hi there,
I'm not quite clear to me what you are after. It looks a bit like you are about to plot a line with a slope of 1 from the origin with the first bit being blue and the remainder being black.

Is this what you are trying to do?
I think dynamically assigning color to a plot() is a little difficult. I would look at imshow or scatter. There you can assign CData and change the colors of every point you have plotted.
Good luck!
Image Analyst
2016-11-20
Call scatter() twice - once for the first 500 with square marker shape, then again for the remaining points with a circle marker.
Nick Counts
2016-11-20
编辑:Nick Counts
2016-11-21
@ Image
I agree yours is the most straightforward method. However, he asked for a one-command plot. It would be helpful to understand why that is a requirement
Image Analyst
2016-11-23
I didn't say call scatter hundreds of times to plot hundreds of points point-by-point. I'm saying call it twice. However if you need a custom, unique, totally different pop-up context menu for every single one of the points, instead of one context menu that applies to any/all points, then I don't know - I've never done that before and doubt I'll ever need to do it in the future either. I can't envision any scenario where you'd need a different "context menu which is individual for every point."
Maier
2016-11-23
回答(1 个)
Nick Counts
2016-11-19
编辑:Nick Counts
2016-11-19
I think you are looking for gscatter, which allows you to define a "group vector" and then define different styles for each group. It works sort of like logical indexing. There is good documentation, but here is an example:
x = 1:1979;
y = 1:1979;
% Make the group vector.
% The first 150 points are group 1
% The rest are group 2
group(1:150) = 1;
group(151:1979) = 2;
% The colors are assigned blue to 1, black to 2
% The marker styles are square to 1, circle to 2
gscatter(x, y, group, 'bk', 'so')

Hope this helps!
2 个评论
Maier
2016-11-23
Image Analyst
2016-11-23
If you want to control a whole bunch more stuff on a data point-by-data point basis, you're going to have to plot it one data point at a time.
类别
在 帮助中心 和 File Exchange 中查找有关 Data Distribution Plots 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!