Как построить равносторонний цветовой треугольник?

Я хотел бы сделать цветной график в MATLAB, похожий на этот график:

http://1.bp.blogspot.com/-QpFb-Yj_MOg/UA4Tw3xuVVI/AAAAAAAAAIQ/T3kTUT39c-A/s1600  /треугольный+заговор.png

Мне удалось создать все точки [x, y], необходимые для создания вершин, и у меня есть карта с цветами каждой вершины, поэтому я могу получить следующее.

Правильный сюжет, но неправильные оси

Но я не понимаю, как заставить работать ось.

Код пока:

% 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);

И функция сетки:

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

person sehlstrom    schedule 16.04.2013    source источник
comment
Хорошая проблема! не могли бы вы опубликовать код того, что у вас есть до сих пор, пожалуйста?   -  person Acorbe    schedule 16.04.2013
comment
@Acrobe Ну вот и код :)   -  person sehlstrom    schedule 16.04.2013
comment
И именно вы просто хотите построить красивую диагональную ось или у вас есть проблемы с тем, что вы рисуете?   -  person Acorbe    schedule 16.04.2013
comment
Это касается только оси. Я контролирую данные, которые должны быть нанесены на график.   -  person sehlstrom    schedule 16.04.2013


Ответы (1)


Основная проблема в том, что вы не можете повернуть оси в правильное положение, потому что они всегда переворачиваются на нижнюю сторону. Значит, нужно их создать.

Вот как:

% 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)

и получаем...

тиангулярный

person EBH    schedule 02.11.2016