图外的顶部 x 轴标签 (MWE)
Top x axis' labels outside of figure (MWE)
顶部x轴的标签出现在图外,请问如何解决?
另外,出于某种原因我不明白,“hold on + plot()”在这种情况下不起作用,我希望能够绘制一条垂直线,但这也没有出现在图中
figure1=figure(4)
axes1 = axes('Parent',figure1,'YScale','log','XScale','log','Layer','top');
grid(axes1,'on');
hold(axes1,'on');
[C,h]=contourf(peaks,[10],'LineColor','none');
clabel(C,h);
hold on %doesn't work
plot([10 10],[0 10],'--k','LineWidth',2) %doesn't work
axis tight;
axis([1 50 1 50])
xlabel('\lambda_x','Fontsize',20);
ylab=ylabel('y^+','Fontsize',20);
grid off
set(ylab, 'Units', 'Normalized', 'Position', [-0.1, 0.5, 0]);
set(gca,'linewidth',1.5,'FontSize',16)
colormap(flipud(gray(256)));
colorbar;
ax2 = axes('Position',axes1.Position,'YScale','log','XScale','log','XAxisLocation','top','YAxisLocation','right','Color','none','YTick',[]);
xla2=xlabel(ax2,'\lambda_x^+','Fontsize',20);
axis(ax2,[1*100 50*100 1*100 50*100])
set(ax2,'linewidth',1.5,'FontSize',16)
% Top x axis' label appears outside of figure
缺失的垂直线很容易修复。问题是您试图在对数刻度上绘制 0,这是不可能发生的。如果你改变
plot([10 10],[0 10],'--k','LineWidth',2)
到
plot([10 10],[0.01 10],'--k','LineWidth',2)
您将看到该行。一个更好的选择是像这样使用 xline 命令:
xline(10, '--k', 'LineWidth', 2)
第二个问题(顶部缺少 x 轴标签)更难解决。顶部 xlabel 消失的原因是第二个轴的大小设置为与第一个轴(底部有标签)的大小相同,因此顶部没有空间放置标签,它会被放置关闭图。通常当你添加一个标签时,坐标轴会向内移动以容纳标签,但由于你手动设置了坐标轴的大小,它并没有移动。
我创建了一些代码来满足您的需求。我首先手动选择轴位置(通过反复试验),这为标签留出了足够的空间。我还手动定位了颜色条,如果它自动定位,它会改变轴的位置,这是我们不想要的,因为我是手动设置的。我还删除了一些不必要的用于打开和关闭网格以及使用保持的代码。我还删除了用于创建第一个轴的代码,因为 contourf 命令将创建一个轴。我还把调轴命令合并到创建第二个轴的命令中。
这是最终代码和结果图
figure(4)
clf
ax_position = [0.15, 0.175, 0.73, 0.625]; % x, y, width and height in normalized units
[C,h]=contourf(peaks, 10, 'LineColor', 'none');
set(gca, 'YScale', 'log', 'XScale', 'log', 'XLim', [1, 50], 'YLim', [1, 50], 'linewidth', 1.5, 'FontSize', 16, ...
'Position', ax_position)
xline(10, '--k', 'LineWidth', 2)
xlabel('\lambda_x','Fontsize',20);
ylab=ylabel('y^+','Fontsize',20);
colormap(flipud(gray(256)));
h_cb = colorbar('Position', [0.9, ax_position(2), 0.0381, ax_position(4)]);
ax2 = axes('Position', ax_position, 'YScale', 'log', 'XScale', 'log', 'XAxisLocation', 'top', ...
'YAxisLocation', 'right', 'Color', 'none', 'YTick',[], 'linewidth', 1.5, 'FontSize',16, ...
'XLim', 100*[1, 50], 'YLim', 100*[1, 50]);
xlabel(ax2,'\lambda_x^+','Fontsize',20);
顶部x轴的标签出现在图外,请问如何解决? 另外,出于某种原因我不明白,“hold on + plot()”在这种情况下不起作用,我希望能够绘制一条垂直线,但这也没有出现在图中
figure1=figure(4)
axes1 = axes('Parent',figure1,'YScale','log','XScale','log','Layer','top');
grid(axes1,'on');
hold(axes1,'on');
[C,h]=contourf(peaks,[10],'LineColor','none');
clabel(C,h);
hold on %doesn't work
plot([10 10],[0 10],'--k','LineWidth',2) %doesn't work
axis tight;
axis([1 50 1 50])
xlabel('\lambda_x','Fontsize',20);
ylab=ylabel('y^+','Fontsize',20);
grid off
set(ylab, 'Units', 'Normalized', 'Position', [-0.1, 0.5, 0]);
set(gca,'linewidth',1.5,'FontSize',16)
colormap(flipud(gray(256)));
colorbar;
ax2 = axes('Position',axes1.Position,'YScale','log','XScale','log','XAxisLocation','top','YAxisLocation','right','Color','none','YTick',[]);
xla2=xlabel(ax2,'\lambda_x^+','Fontsize',20);
axis(ax2,[1*100 50*100 1*100 50*100])
set(ax2,'linewidth',1.5,'FontSize',16)
% Top x axis' label appears outside of figure
缺失的垂直线很容易修复。问题是您试图在对数刻度上绘制 0,这是不可能发生的。如果你改变
plot([10 10],[0 10],'--k','LineWidth',2)
到
plot([10 10],[0.01 10],'--k','LineWidth',2)
您将看到该行。一个更好的选择是像这样使用 xline 命令:
xline(10, '--k', 'LineWidth', 2)
第二个问题(顶部缺少 x 轴标签)更难解决。顶部 xlabel 消失的原因是第二个轴的大小设置为与第一个轴(底部有标签)的大小相同,因此顶部没有空间放置标签,它会被放置关闭图。通常当你添加一个标签时,坐标轴会向内移动以容纳标签,但由于你手动设置了坐标轴的大小,它并没有移动。
我创建了一些代码来满足您的需求。我首先手动选择轴位置(通过反复试验),这为标签留出了足够的空间。我还手动定位了颜色条,如果它自动定位,它会改变轴的位置,这是我们不想要的,因为我是手动设置的。我还删除了一些不必要的用于打开和关闭网格以及使用保持的代码。我还删除了用于创建第一个轴的代码,因为 contourf 命令将创建一个轴。我还把调轴命令合并到创建第二个轴的命令中。
这是最终代码和结果图
figure(4)
clf
ax_position = [0.15, 0.175, 0.73, 0.625]; % x, y, width and height in normalized units
[C,h]=contourf(peaks, 10, 'LineColor', 'none');
set(gca, 'YScale', 'log', 'XScale', 'log', 'XLim', [1, 50], 'YLim', [1, 50], 'linewidth', 1.5, 'FontSize', 16, ...
'Position', ax_position)
xline(10, '--k', 'LineWidth', 2)
xlabel('\lambda_x','Fontsize',20);
ylab=ylabel('y^+','Fontsize',20);
colormap(flipud(gray(256)));
h_cb = colorbar('Position', [0.9, ax_position(2), 0.0381, ax_position(4)]);
ax2 = axes('Position', ax_position, 'YScale', 'log', 'XScale', 'log', 'XAxisLocation', 'top', ...
'YAxisLocation', 'right', 'Color', 'none', 'YTick',[], 'linewidth', 1.5, 'FontSize',16, ...
'XLim', 100*[1, 50], 'YLim', 100*[1, 50]);
xlabel(ax2,'\lambda_x^+','Fontsize',20);