How to plot an equilateral color triangle?

爷,独闯天下 提交于 2019-12-11 11:59:28

问题


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

回答1:


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...



来源:https://stackoverflow.com/questions/16038101/how-to-plot-an-equilateral-color-triangle

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!