用MATLAB绘制三元相图

时间:2016-11-08 14:19:36

标签: matlab plot ternary ternplot

我想根据ab-initio能量输入绘制三元相图。在那里,我发现了一个可以帮助我的有用工具:

https://de.mathworks.com/matlabcentral/fileexchange/2299-alchemyst-ternplot

我需要改变几个问题:

  1. 我喜欢在图上看到我的输入阶段“名称标签”,我输入数据中的坐标。 (不仅仅是单独图中的蓝点)

  2. 我在terndemo.m中输入了正能量值,如下所示。然而,它们实际上是负值,当我输入负值时,表面没有正确显示。

  3. 我需要给出热谱标签吗?

  4. 最后,我的轴标签开始不正确。例如,0不在三角形的边缘点。

  5. 我还附上了关于这个数字的所有问题。

    有人可以就这些问题发表一些意见吗?

    ---这是我的demotern.m输入:

    %% Ti Ce Fe
    % Name of the phases in coordinates below: Ti, Ce, Fe, FeTi, Fe2Ti,
    % CeFe2,CeFe5, Ce2Fe17 and CeFe11Ti
    experimental = [...
    
        1.000   0.000   0.000
        0.000   1.000   0.000
        0.000   0.000   1.000
        0.500   0.000   0.500
        0.340   0.000   0.660
        0.000   0.340   0.660
        0.000   0.160   0.840
        0.000   0.110   0.890
        0.0765  0.0765  0.847
       ];
    % data values are actually negative, here I enter positive value
    data = [...
    
        0.0
        0.0
        0.0
        0.419
        0.273
        0.090
        0.014
        0.010
        0.068
        ];
    
    A = experimental(:, 1)';
    B = experimental(:, 2)';
    C = 1 - (A + B);
    
    figure
    subplot(2, 2, 1)
    ternplot(A, B, C, '.'); ternlabel('Content of Titanium', 'Content of Cerium', 'Content of Iron');
    subplot(2, 2, 2)
    ternpcolor(A, B, data); ternlabel('Content of Titainum', 'Content of Cerium', 'Content of Iron');
    shading interp
    subplot(2, 2, 3)
    terncontour(A, B, data); ternlabel('Content of Titanim', 'Content of Cerium', 'Content of Iron');
    subplot(2, 2, 4)
    ternsurf(A, B, data);
    

    Here is the image

1 个答案:

答案 0 :(得分:0)

我是ternplot的作者

这是我能做的最好的事情:

  1. 为情节添加标签
  2. 我在ternpcolor中绘制曲面图的方式使得很难使用负值。有一个解决方案,包括从下面查看图,但我会留下另一个问题
  3. 为色条添加了标签
  4. 在我的图中标签是正确的。检查您是否有最新版本。
  5. -

    names = {'Ti', 'Ce', 'Fe', 'FeTi', 'Fe2Ti', 'CeFe2', 'CeFe5', ...
             'Ce2Fe17', 'CeFe11Ti'};
    figure
    ternpcolor(A, B, data); 
    vertexlabel('Titainum', 'Cerium', 'Iron');
    shading interp
    c = colorbar();
    ylabel(c, 'Formation energy per atom (eV)')
    hold on
    for i = 1:length(names)
        [x, y] = terncoords(experimental(i, 1), experimental(i, 2));
        z = data(i);
    
        scatter3(x, y, z+0.4, 100, 'filled', 'ks');
        t = text(x + 0.01, y-0.02, z+0.03, names{i}, 'fontsize', 20);
    end
    hold off
    

    如下所示,没有手动编辑:

    Output with no editing

    但是稍微调整一下(实际上只是移动标签)它非常实用:

    Output hand-edited