I would like to make a color plot in MATLAB similar to this plot:
I have managed to create all the points [x,y] needed in order to create the vertexes and I have a map with colors of each vertex, so I can get the following.
But I do not get it how to make the axis work.
Code so far:
% Equilateral grid
tcorner = [0.0, 0.5, 1.0;
0.0, 1.0*sqrt(3)/2, 0.0];
tg = triangle_grid( 1/0.05, tcorner );
tgx = tg(1,:);
tgy = tg(2,:);
% Create triangles
tri = delaunay(tgx,tgy);
% Plot
h = trisurf(tri, tgx, tgy, colorvector);
And the grid function:
function triangle_grid(n, tcorner)
ng = ( ( n + 1 ) * ( n + 2 ) ) / 2;
tg = zeros ( 2, ng );
p = 0;
for i = 0 : n
for j = 0 : n - i
k = n - i - j;
p = p + 1;
tg(1:2,p) = ( i * t(1:2,1) + j * t(1:2,2) + k * t(1:2,3) ) / n;
end
end
end
The main problem is that you can't rotate the axes to the right position, because the always flip to the lower side. So, you need to create them.
Here is how:
% Equilateral grid
tcorner = [0.0, 0.5, 1.0; % x
0.0, 1.0*sqrt(3)/2, 0.0]; % y
tg = triangle_grid( 1/0.05, tcorner);
tgx = tg(1,:);
tgy = tg(2,:);
% Create triangles
tri = delaunay(tgx,tgy);
col = rand(size(tgx));
trisurf(tri,tgx,tgy,col)
view(0,90)
colormap('lines')
% setting the axes:
ax = gca;
grid off
ax.YAxis.Visible = 'off';
ticks = (0:20:80).';
% bottom axis:
tickpos = linspace(tcorner(1,1),tcorner(1,3),numel(ticks)+1);
ax.XAxis.FontSize = 14;
ax.XAxis.TickValues = tickpos(1:end-1);
ax.XAxis.TickLabels = ticks;
ax.XAxis.TickLabelRotation = 45;
xlabel('X axis title');
% left & right axis:
ticksxpos = linspace(tcorner(1,1),tcorner(1,3),numel(ticks)*2+1);
ticksypos = linspace(tcorner(2,1),tcorner(2,2),numel(ticks)+1);
text(ticksxpos(numel(ticks)+1:-1:2)-0.03,... % left
ticksypos(end:-1:2)+0.03,...
num2str(ticks),'FontSize',14,...
'VerticalAlignment','bottom',...
'HorizontalAlignment','left',...
'Rotation',-45)
text(ticksxpos(end:-1:numel(ticks)+2)+0.05,... % right
ticksypos(1:end-1)-0.03,...
num2str(ticks),'FontSize',14,...
'VerticalAlignment','bottom',...
'HorizontalAlignment','right')
ax.Parent.Color = 'w';
% titles:
text(tcorner(1,2)/2-0.06,tcorner(2,2)/2+0.06,...
'Left title','FontSize',14,...
'HorizontalAlignment','center',...
'Rotation',45)
text(tcorner(1,2)+tcorner(1,2)/2+0.06,tcorner(2,2)/2+0.06,...
'Right title','FontSize',14,...
'HorizontalAlignment','center',...
'Rotation',-45)
and we get...