matlab - 在原点设置刻度标签
Posted
技术标签:
【中文标题】matlab - 在原点设置刻度标签【英文标题】:matlab - set tick label at origin 【发布时间】:2017-02-03 14:54:35 【问题描述】:在使用 Matlab 生成绘图时,当 x 和 y 最小值都为零时,我宁愿只用一个零来标记原点,而不是在两个轴上都表示它。
Matlab默认是后者,像这样
而我想要更像这样的东西
这可以手动完成,但我正在尝试自动化该过程。删除0
的x
和y
刻度标签显然很容易。但是,我似乎无法访问轴刻度标签位置的任何句柄,以正确定位“新原点”的文本框。在给定的图形中,与 x 和 y 轴的刻度标签偏移量似乎有些恒定(以物理单位,而不是标准化单位),但我不知道这是否是所有图形或轴的标准。
有什么想法吗?
我正在运行 Matlab 2014b。
【问题讨论】:
【参考方案1】:这是一个简单的方法:
% somthing to plot:
x = 0:0.1:2*pi;
y = abs(sin(x)+cos(x));
plot(x,y)
% get the handle for the current axes:
ax = gca;
% get the position of the zero tick on y-axis:
zeroYtick = ax.YAxis.TickValues==0;
% remove it (tick and lable)
ax.YAxis.TickValues(zeroYtick) = [];
结果:
如果您希望0
向左偏移一点,那么它将位于绘图的角落,您可以使用注释:
% get the position of the zero tick on x-axis:
zeroXtick = ax.XAxis.TickValues==0;
% remove it (tick and lable)
ax.XAxis.TickValues(zeroXtick) = [];
% place a new zero at the origin:
dim = [0.1 0.01 0.1 0.1];
annotation('textbox',dim,'String','0',...
'FitBoxToText','on','LineStyle','none')
你会得到:
annotation
的优点是原点始终相对于坐标区的角放置,您无需知道坐标区刻度的值即可正确偏移它。
编辑:
对于 2016a 之前的版本,您可以使用以下内容(我写得更紧凑一些):
ax = gca;
% remove the zero tick on y-axis (tick and lable):
ax.YTick(ax.YTick==0) = [];
% remove the zero tick on x-axis (tick and lable):
ax.XTick(ax.XTick==0) = [];
% place a new zero at the origin:
dim = [0.1 0.01 0.1 0.1];
annotation('textbox',dim,'String','0',...
'FitBoxToText','on','LineStyle','none')
编辑 2:
保持0
就位的另一种选择是将其粘在轴上。这是通过将Parent
替换为轴句柄来完成的。首先,我们需要注释的句柄(从上次编辑继续):
t = annotation('textbox',dim,'String','0',...
'FitBoxToText','on','LineStyle','none');
然后我们切换Parent
并设置新位置:
t.Parent = ax;
t.Position(1:2) = -[0.2 0.1];
最后,我们通过将Units
转换为像素来超级粘合它:
t.Units = 'Pixels';
【讨论】:
这正是我想要的,即0
从左边一点点偏移。注释似乎可以解决问题,但是如果您随后调整图形大小,0
会移动。另外,我假设您使用的版本晚于 2014b,因为图形句柄不同。我没有处理 ax.XAxis 等。但这并不重要,我可以删除刻度标签,正确注释 0
是我卡住的地方。
@Brian,如果您将图形挤压得过多,则 0
设置不正确,否则,我可以根据需要调整它的大小,并且它会固定在它的位置上。无论如何,我为早期版本的 Matlab 添加了一个版本的代码。
调整大小仍然会在我的系统上移动0
。我不确定你是否有不同的设置而不是你的设置,但是一旦我调整图形的大小,带注释的 0
就会四处移动,以免位于原点(请注意,即使图形是仅略微调整大小)。我当然很欣赏这个答案,但它并不能完全满足我的要求。我尝试在调整图形大小后添加注释,结果相同,并尝试使用归一化和物理单位的轴单位调整大小。【参考方案2】:
以下将排除 yaxis 上的第一个刻度,而根本不移动图形。您可以通过在删除第一个之前设置轴限制 ylim([0,upper_limit])
或手动设置 yTicks set(h,'yTick',my_ticks)
来确保删除正确的项目。注意yTick
会改变刻度的位置,而yTickLabel
会改变出现在yTick
每个位置的文本
h = plot([0,1],[0,1]);
yTicks = get(h,'yTick');
set(h,'yTick',yTick(2:end));
【讨论】:
以上是关于matlab - 在原点设置刻度标签的主要内容,如果未能解决你的问题,请参考以下文章