MATLAB Answers

Do other options exist when applying marker face colors to a gplotmatrix?

1 view (last 30 days)
Brad
Brad on 25 Aug 2019
Edited: Brad on 5 Sep 2019
I'm implementing a gplotmatrix where the need to add marker face colors is needed for visual engancement. In the process of doing this, I've come up with an approach that works, with a caveat. In the following code, I've had to flip the order of elements pertaining to the variable newDefaultColors to ensure the marker colors and face colors are identical.
% Close all open figures, clear all workspace variables, and clear the command window
close all;
clear all; %#ok<CLALL>
clc;
% Load discrim variables into workspace
load discrim;
% Get the initial set of default plot colors
initialColorOrder = get(gca,'ColorOrder');
% Close the previously opened figure
close all;
% Create list selection dialog box
listdlg = menu('Which ColorOrder do you want?', 'random', 'hsv', 'hot', 'cool', 'pink');
% Ensure the number of data sets is the length of the unique groups
numberOfDataSets = length(unique(group));
% Create a new colormap that will define the new default color order property.
switch listdlg
case 1
newDefaultColors = rand(numberOfDataSets, 3);
case 2
newDefaultColors = hsv(numberOfDataSets);
case 3
newDefaultColors = hot(numberOfDataSets);
case 4
newDefaultColors = cool(numberOfDataSets);
otherwise
newDefaultColors = pink(numberOfDataSets);
end
% Flip the new default colors prior to adding marker face colors to plots
Marker_Face_Colors = flip(newDefaultColors);
% Apply the new default colors to the current axes
set(gca, 'ColorOrder', newDefaultColors);
% Now get the new set of default plot colors
newColorOrder = get(gca,'ColorOrder');
% Plot is created correctly with the following code
[h, ax, bigax] = gplotmatrix(ratings(:, 1:2), ratings(:, [4 7]), group, newColorOrder, 'o', 10, 'on', '', categories(1:2,:), categories([4 7],:));
% Turn on the X,Y grids for all 4 plots
ax(1,1).XGrid = 'on';
ax(1,1).YGrid = 'on';
ax(1,2).XGrid = 'on';
ax(1,2).YGrid = 'on';
ax(2,1).XGrid = 'on';
ax(2,1).YGrid = 'on';
ax(2,2).XGrid = 'on';
ax(2,2).YGrid = 'on';
% Apply marker face colors to the upper left corner plot
hobj11 = findobj(ax(1,1), 'Type', 'line');
for jj = 1:size(Marker_Face_Colors, 1)
hobj11(jj).MarkerFaceColor = Marker_Face_Colors(jj,:);
end
% Apply marker face colors to the upper right corner plot
hobj12 = findobj(ax(1,2), 'Type', 'line');
for jj = 1:size(Marker_Face_Colors, 1)
hobj12(jj).MarkerFaceColor = Marker_Face_Colors(jj,:);
end
% Apply marker face colors to the upper left corner plot
hobj21 = findobj(ax(2,1), 'Type', 'line');
for jj = 1:size(Marker_Face_Colors, 1)
hobj21(jj).MarkerFaceColor = Marker_Face_Colors(jj,:);
end
% Apply marker face colors to the upper left corner plot
hobj22 = findobj(ax(2,2), 'Type', 'line');
for jj = 1:size(Marker_Face_Colors, 1)
hobj22(jj).MarkerFaceColor = Marker_Face_Colors(jj,:);
end
I'm not sure why I need to do this. Or if it's a good implementation going forward.
Do other options exist when applying marker face colors to a gplotmatrix?

  2 Comments

Walter Roberson
Walter Roberson on 25 Aug 2019
A sightly different approach that is not any better but makes the code more compact:
hobjs = [findobj(ax(1,1), 'Type', 'line'), findobj(ax(1,2), 'Type', 'line'), findobj(ax(2,1), 'Type', 'line'), findobj(ax(2,2), 'Type', 'line')];
for jj = 1 : size(hobjs,1)
set(hobjs(j,:) 'MarkerFaceColor', Marker_Face_colors(jj,:));
end
Brad
Brad on 5 Sep 2019
Walter, I'm afraid I have to agree. I haven't found another approach yet that will yield the desired result. Thanks for the feedback.

Sign in to comment.

Answers (0)

Community Treasure Hunt

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

Start Hunting!

Translated by