轴标签不显示在3d子图上

时间:2014-05-15 16:03:04

标签: matlab mesh labels axes subplot

我创建了5个包含for循环的3D子图。但是,由于某种原因,X轴和Y轴的标签不显示。我很感激你对此事的任何帮助。以下是代码。

另外,另外,任何使这个数字更美观的建议也会受到高度赞赏。

% parameters
b=0.5;
O=27;
x=1:1:5;

% energies 
e1 = 1:1:100;
e2 = 1:1:100; 

% function
[e1,e2]=meshgrid(e1,e2);

hb=@(x)((O.^2)./factorial(O-x)).*...
    exp(-b.*O.*e2);

hu=@(x)(O.^x).*...
    exp(-b.*O.*e1);

p=@(x)hb(x)./(hb(x)+hu(x));

f=figure('visible','on')
clf(f);

for i=x
    subplot(2,3,i);
    mesh(e1,e2,p(i))
    title(['X = ',int2str(i)], 'FontSize',12);

    % log all axes
    set(gca, 'XScale', 'log');
    set(gca, 'YScale', 'log');
    set(gca, 'ZScale', 'log');

    axis([1 100 1 100 10^-300 1])
    axis square
    grid off 
    set(gca,'FontSize',10)

    xlabel('e1')
    ylabel('e2')
    zlabel('p_{H}')
end

1 个答案:

答案 0 :(得分:1)

这个问题似乎是MATLAB内部的问题,它是如何在使用3D曲面图时设置x和y标签的位置的。基本plot3图不会发生这种情况。如果您执行get(get(gca,'Xlabel','Position')),您会看到标签的z坐标设置为无穷大,我猜这是问题所在。

我提出了一个不太理想的解决方法,但它似乎完成了任务:

% parameters
b=0.5;
O=27;
x=1:1:5;

% energies 
e1 = 1:1:100;
e2 = 1:1:100; 

% function
[e1,e2]=meshgrid(e1,e2);

hb=@(x)((O.^2)./factorial(O-x)).*...
    exp(-b.*O.*e2);

hu=@(x)(O.^x).*...
    exp(-b.*O.*e1);

p=@(x)hb(x)./(hb(x)+hu(x));

f=figure('visible','on');
clf(f);

for i=x
    subplot(2,3,i);
    mesh(e1,e2,p(i))
    title(['X = ',int2str(i)], 'FontSize',12);

    % log all axes
    set(gca, 'XScale', 'log');
    set(gca, 'YScale', 'log');
    set(gca, 'ZScale', 'log');

    axis([1 100 1 100 10^-300 1])
    axis square
    grid off 
    set(gca,'FontSize',10)
    xlabel('e1')
    ylabel('e2')
    zlabel('p_{H}')
    set(get(gca,'xlabel'),'Units','Normalized','Position',[0.75 0 0])
    set(get(gca,'ylabel'),'Units','Normalized','Position',[0 0.05 0])
end

您可能需要操纵这些位置向量,以便将标签准确地放在您想要的位置。

我还会提交错误报告,看看MathWorks说的是什么。