Plotting multiple 3D plots on one graph

20 views (last 30 days)
JD
JD on 2 Oct 2019
Edited: JD on 3 Oct 2019
Hi,
I have the following code. I want to plot all 7 on the same plot. How do I do that?
I tried hold on, but that gives me an empty plot. Thank you!
figure (4)
plot3(cm_willans,pma_1400,pme_e, '-r');
plot3(cm_willans,pma_1900,pme_e, '-m');
plot3(cm_willans,pma_2500,pme_e, '-g');
plot3(cm_willans,pma_3000,pme_e, '-b');
plot3(cm_willans,pma_4200,pme_e, '-k');
plot3(cm_willans,pma_5300,pme_e, '-y');
plot3(cm_willans,pma_6400,pme_e, '-c');
grid on
hold on
xlabel('Cm in m/s')
ylabel('Pma in Pascals')
zlabel('Pme in Pascals')
Also, secondary question: How do I create a legend for each one of those lines? Thanks

Accepted Answer

Shubham Gupta
Shubham Gupta on 2 Oct 2019
Try :
figure (4)
grid on
hold on % Hold position should be at the start of plotting to overlap plots
plot3(cm_willans,pma_1400,pme_e, '-r','DisplayName','legend-1');
plot3(cm_willans,pma_1900,pme_e, '-m','DisplayName','legend-2');
plot3(cm_willans,pma_2500,pme_e, '-g','DisplayName','legend-3');
plot3(cm_willans,pma_3000,pme_e, '-b','DisplayName','legend-4');
plot3(cm_willans,pma_4200,pme_e, '-k','DisplayName','legend-5');
plot3(cm_willans,pma_5300,pme_e, '-y','DisplayName','legend-6');
plot3(cm_willans,pma_6400,pme_e, '-c','DisplayName','legend-7'); % DisplayName property to set legend name
xlabel('Cm in m/s')
ylabel('Pma in Pascals')
zlabel('Pme in Pascals')
legend show
Hope it helps !
  5 Comments
Shubham Gupta
Shubham Gupta on 3 Oct 2019
Edited: Shubham Gupta on 3 Oct 2019
Use subplot to create subplots on the plot. Try :
figure;
subplot(171)
plot3(cm_willans,pma_1400,pme_e, '-r','DisplayName','legend-1');
xlabel('Cm in m/s')
ylabel('Pma in Pascals')
zlabel('Pme in Pascals')
legend show
subplot(172)
plot3(cm_willans,pma_1900,pme_e, '-m','DisplayName','legend-2');
xlabel('Cm in m/s')
ylabel('Pma in Pascals')
zlabel('Pme in Pascals')
legend show
subplot(173)
plot3(cm_willans,pma_2500,pme_e, '-g','DisplayName','legend-3');
xlabel('Cm in m/s')
ylabel('Pma in Pascals')
zlabel('Pme in Pascals')
legend show
subplot(174)
plot3(cm_willans,pma_3000,pme_e, '-b','DisplayName','legend-4');
xlabel('Cm in m/s')
ylabel('Pma in Pascals')
zlabel('Pme in Pascals')
legend show
subplot(175)
plot3(cm_willans,pma_4200,pme_e, '-k','DisplayName','legend-5');
xlabel('Cm in m/s')
ylabel('Pma in Pascals')
zlabel('Pme in Pascals')
legend show
subplot(176)
plot3(cm_willans,pma_5300,pme_e, '-y','DisplayName','legend-6');
xlabel('Cm in m/s')
ylabel('Pma in Pascals')
zlabel('Pme in Pascals')
legend show
subplot(177)
plot3(cm_willans,pma_6400,pme_e, '-c','DisplayName','legend-7');
xlabel('Cm in m/s')
ylabel('Pma in Pascals')
zlabel('Pme in Pascals')
legend show
I am not sure if that's what you want. Let me know if you have doubts

Sign in to comment.

More Answers (1)

OMKAR SHETYE
OMKAR SHETYE on 28 Aug 2021
For the legend part :- first create a vector which will have all the names for the respective plots, then call the legend function using the pre-defined vector.
figure (4)
grid on
hold on % Hold position should be at the start of plotting to overlap plots
plot3(cm_willans,pma_1400,pme_e, '-r','DisplayName','legend-1');
plot3(cm_willans,pma_1900,pme_e, '-m','DisplayName','legend-2');
plot3(cm_willans,pma_2500,pme_e, '-g','DisplayName','legend-3');
plot3(cm_willans,pma_3000,pme_e, '-b','DisplayName','legend-4');
plot3(cm_willans,pma_4200,pme_e, '-k','DisplayName','legend-5');
plot3(cm_willans,pma_5300,pme_e, '-y','DisplayName','legend-6');
plot3(cm_willans,pma_6400,pme_e, '-c','DisplayName','legend-7'); % DisplayName property to set legend name
xlabel('Cm in m/s')
ylabel('Pma in Pascals')
zlabel('Pme in Pascals')
v = ["Plot-1","Plot-2","Plot-3","Plot-4","Plot-5","Plot-6","Plot-7"]
legend(v)

Products

Community Treasure Hunt

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

Start Hunting!