顶部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

发布于 2020-12-28 23:51:23
缺少的垂直线很容易修复。问题是您试图在对数刻度上绘制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消失的原因是第二个轴的大小被设置为与第一个轴的大小相同(标签在底部),因此顶部没有空间放置标签,标签将被放置在图形之外。通常,当您添加标签时,轴将向内移动以容纳标签,但由于您手动设置了轴的大小,因此它不会移动。
我创建了一些代码来做你想要的事情。我从手动选择轴位置开始(通过反复试验),这为标签留出了足够的空间。我还手动定位了颜色条,如果它被自动定位,它会改变轴的位置,这是我们不想要的,因为我是手动设置的。我还删除了一些不必要的代码,用于打开和关闭网格以及使用hold。我还删除了创建第一个轴的代码,因为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);

https://stackoverflow.com/questions/65442210
复制相似问题