MATLAB Answers

Stem plot with minimal spaces between lines

6 views (last 30 days)
shane watson
shane watson on 10 Dec 2019
Commented: Adam Danz on 14 Dec 2019
Hello,
I'm using stem plot to show my data here is my code. However, my question is there are spaces between two stem lines, I wanted to fill the space with same stem lines, can someone guide me regarding this. e.g., stem plots 5 and 5 but I really need to insert some more line between these vaules to fill the space and the total array values remain 24 same. Thanks in advace.
t=[5 5 5 5 5 5 6 2 2 2 2 4 4 4 4 4 4 4 1 1 6 6 6 6];
stem(t,'-s','MarkerFaceColor',[0 1 0],'LineWidth',1.5);
hold on

  4 Comments

Show 1 older comment
shane watson
shane watson on 10 Dec 2019
@Adam Danz, I was looking to refer you to this question but you got it ;) My goal is the same, but I was looking to do it in another way. Can you answer the last part of this question
Adam Danz
Adam Danz on 11 Dec 2019
Done. Let me know if there are any other loose ends.
shane watson
shane watson on 11 Dec 2019
@Adam, Fantastic, you're great. The Only things that make me in trouble is now the legend problem, I have three data 1, data 2, data 3. 'data 1' is simple plot, 'data 2' is filled with color and polkadots and '3' is filled with color only. So the legend should show this way, but in my case legend show the data but in data 2 only shows symbol and in data 3 shows the color of data 2. Kindly see image it illustrates the problem.Legend.PNG

Sign in to comment.

Accepted Answer

Adam Danz
Adam Danz on 11 Dec 2019
"The Only things that make me in trouble is now the legend problem, I have three data 1, data 2, data 3."
Method 1: turn off IconDisplayStyle
Two steps:
1) turn off the icon display of the polkadot handle
2) call legend after you to step 1.
h = plot(inX,inY,'k.','MarkerSize',4,'MarkerFaceColor','k'); % Plot polkadots
h.Annotation.LegendInformation.IconDisplayStyle = 'off' % Turn off legend display for polkadots
legend(. . .) % Create the legend
Method 2: Specify handles in legend
Two steps:
1) get the handles to all objects you want in the legend
2) Create the legend at the end and provide those handles as input.
hold on
h1 = plot(. . ., 'DisplayName', 'Legend1'); % plot stuff that should appear on legend
h2 = plot(. . ., 'DisplayName', 'Legend2'); % plot more stuff that goes on the legend
h3 = plot(. . . ); % Polkadots
% at the end of the plotting stuff
legend([h1,h2])

  8 Comments

Show 5 older comments
Adam Danz
Adam Danz on 12 Dec 2019
Follow these easy steps to get your legend right. If you tried it and the legend still isn't correct, share your updated code and I'll point out which lines are incorrect.
1. For every object on your axes that you want to appear in the legend, add a DisplayName. Here are examples (you can change the display names).
x1=stairs(t,'-s','MarkerFaceColor',[0.9290 0.6940 0.1250],...
'MarkerSize',4,'LineWidth',1.5,'DisplayName', 'Data1');
% ^^^^^^^^^^^^^^^^^^^^^^
viu=fill(polyX,polyY,[1 0 0], 'DisplayName', 'Fill1')
% ^^^^^^^^^^^^^^^^^^^^^
h = plot(inX,inY,'k.','MarkerSize',4,'MarkerFaceColor','k',...
'DisplayName','MyOtherData')
% ^^^^^^^^^^^^^^^^^^^^^^^^^^^
2. If there are any objects that you don't want on the legend apply this to the object handle.
sh2.Annotation.LegendInformation.IconDisplayStyle = 'off'
% ^^^ put object handle here
3. If you've done steps 1 and 2 correctly, when you call legend you just have to use this line without any inputs. This goes at the end of the plotting code.
Load1 = legend(); % no inputs needed!
shane watson
shane watson on 13 Dec 2019
You are real mentor @Adam Danz, I will keep you in my loop for the help. (I sent you a message can you respond to that).
Thank you
Adam Danz
Adam Danz on 14 Dec 2019
Thank you, Shane; glad I can help out!
Just FYI, I didn't receive a message, in case it's important.

Sign in to comment.

More Answers (0)

Sign in to answer this question.

Tags