Combine multiple data series into a single series

5 Ansichten (letzte 30 Tage)
Peter
Peter am 22 Mär. 2019
Bearbeitet: Adam Danz am 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.

Akzeptierte Antwort

Adam Danz
Adam Danz am 22 Mär. 2019
Bearbeitet: Adam Danz am 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 Kommentare
Peter
Peter am 22 Mär. 2019
Thanks, this is exactly what I was looking for. I assumed that you could pass the handle into 'legend' but I couldn't figure out how.
I ended up outputing the handle of the first segment from the custom plot function.
hold on
h(1) = plot(x,y);
h(2) = plot(x2,y2);
h(3) = plotCustom(data);
Legend{1}='series 1';
Legend{2}='series 2';
Legend{3}='series 3';
legend(h,Legend)
function[h]=plotCustom(data)
...
h=plot([(xStart;xEnd],[yStart;yEnd],'color',c);
h=h(1);%combine all plotted segments into a single handle, so that the legend treats this as a single series
end
Adam Danz
Adam Danz am 22 Mär. 2019
Bearbeitet: Adam Danz am 22 Mär. 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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by