# Combine multiple data series into a single series

18 views (last 30 days)
Peter on 22 Mar 2019
Edited: Adam Danz on 19 Aug 2020
Is there a way to combine multiple data series so that they only display as a single series in the Legend?
I have a function that uses 'plot' to plot multiple line segments. It can be thought of as a custom 'marker' shape class. Each data point is drawn using multiple line segments. I plot this (conceptually) single data series on the same plot as multiple other data series.
When I use the 'legend' function, each segment shows up as a separate element. So if I have plotted 2 series using the standard 'plot' function, and one using this custom function, with N data points, the legend thinks that there are N+2 data series. I want to treat this as 3 data series.

Adam Danz on 22 Mar 2019
Edited: Adam Danz on 19 Aug 2020
Specify a vector of object handles in your call to legend.
Example
hold on
h(1) = plot(x,y);
h(2) = plot(x2,y2);
h(3) = plot(x3,y3);
legend(h(1), 'data')
If you're using the 'DisplayName' property, you can use the legendUnq() FEX submission to represent only unique names in your legend.
Example
hold on
for i = 1:3
h(i) = plot(rand(1,10), rand(1,10, 'o'), 'DisplayName', sprintf('Data_%d',i));
end
legend(legendUnq(gca))
##### 2 CommentsShow 1 older commentHide 1 older comment
Adam Danz on 22 Mar 2019
Edited: Adam Danz on 22 Mar 2019
One simplification I could suggest: if you use the 'DisplayName' property in your call to plot, you don't need to produce the "Legend" cell array.
function[h]=plotCustom(data)
...
temph=plot([(xStart;xEnd],[yStart;yEnd],'color',c, 'DisplayName', sprintf('series %d', i))); % assumes 'i' is available
h(i)=temph(1);
...
legend(h)
end