我创建了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
答案 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说的是什么。