How to make 4D scatter bubble plot marker size legend?

2 visualizaciones (últimos 30 días)
Andrew Robison
Andrew Robison el 29 de Sept. de 2017
Respondida: Walter Roberson el 5 de Oct. de 2017
I am looking to display results from a multi-objective optimization with four objective functions. The 'scatter' function works nicely to display the data, but I cannot figure out how to make a proper legend for the circle sizes. Here's an example script for what I am trying to do:
%4D Bubble Plot Script
%Takes 4 Objective function values and makes a bubble plot to visualize the
%data
clear
clc
close all
%Pareto Values
x1=10*rand(100,1);
x2=10*rand(100,1);
x3=10*rand(100,1);
x4=10*rand(100,1);
%Sort According to decreasing diameter
[x4,I]=sort(x4);
x4=wrev(x4);
x1=wrev(x1(I));
x2=wrev(x2(I));
x3=wrev(x3(I));
%Generate Figure
figure()
scatter (x1,x2,100*x4,x3,'filled','MarkerEdgeColor',[0 0 0],'LineWidth',0.5)
colormap jet
c=colorbar('Limits',[0 10],'Ticks',0:10,'FontName','Times New Roman','FontSize',14);
c.Label.String = 'x_{3} [units]';
c.Label.FontSize=14;
axis([0 10 0 10])
xlabel('x_{1} [units]')
ylabel('x_{2} [units]')
xticks(0:10)
yticks(0:10)
set(gca,'FontName','Times New Roman','FontSize',14,'LineWidth',1.5);
set(gcf,'color','w');
I would like to make a legend like the one I made in inkscape as an example in this figure. For the fourth variable x_4, I added a scaling factor in the 'scatter' function to make the circles appear slightly larger, so I would also like to be able to account for that in the legend if possible.
Also, when the figure is exported as an emf the '[units]' gets put into the subscript for both vertical axes, but the legend labels appear correctly in the MATLAB figure though. Any ideas how to correct that?

Respuestas (1)

Walter Roberson
Walter Roberson el 5 de Oct. de 2017
legend() will only create one entry for each plot handle, but scatter() only creates one plot handle per call.
Work around:
Lh(1) = scatter(nan, nan, min(x4)*100, 'k');
Lh(2) = scatter(nan, nan, max(x4)*100, 'k');
legend(Lh, {'min {x4}', 'max {x4}'} )

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by