我在 Matlab 中做了一个情节,使用:
hold on
plot(t1,Dx1,'r')
xlabel('t (ps)')
ylabel('Deviation of coordinate from initial coordinate (Å)')
plot(t1,Dy1,'g')
plot(t1,Dz1,'b')
hold off
但是,y 轴上的刻度标签是以科学计数法生成的:
有什么办法可以删除科学记数法,只让 y 标签范围从 -0.0025 到 0.0005?谢谢!
您可以尝试使用 sprintf 自己手动设置刻度标签:
yt = get(gca,'YTick');
set(gca,'YTickLabel', sprintf('%.4f|',yt))
创建轴后尝试添加:
ax = gca;
ax.YAxis.Exponent = 0;
这是一个例子:
x = 0:0.1:10;
y = 1000*x.^2;
%Plot with default notation:
subplot(1,2,1)
plot(x,y)
%Plot without exponent:
subplot(1,2,2)
plot(x,y)
ax = gca
ax.YAxis.Exponent = 0;
我还努力让我的绘图轴以固定概念而不是科学记数法显示。对我来说最令人沮丧的部分是,即使在我手动将刻度标签重新分配为固定符号后,“x10^4”标签仍会保留在绘图框的边缘。最后,感谢上面的帖子,我在图形渲染器中跟踪了问题。我正在使用“OpenGL”。当我更改为“zbuffer”时,“x10^4”标签会在我手动重置刻度标签时正确消失。这是一个示例代码,它将 '###,###.0' 格式应用到 y 轴标签,甚至在缩放/平移等时动态更新 y 标签,这要归功于我在Matlab 文件交换。找到其他两个函数的位置包含在示例函数下面的注释中。
function []=TickFixExample()
figure %this one works
myRenderer='zbuffer';
set(gcf,'Renderer', myRenderer);
axesh = axes();
set(gca,'YLim',[20000 20100]);
title(myRenderer)
ticklabelformat(gca,'y','###,###.0');
figure %this one doesn’t work
myRenderer='OpenGL';
set(gcf,'Renderer', myRenderer);
axesh = axes();
set(gca,'YLim',[20000 20100]);
title(myRenderer)
ticklabelformat(gca,'y','###,###.0');
Y. Altman 的函数 ticklabelformat(hAxes,axName,format),可在以下位置找到:http: //www.mathworks.com/matlabcentral/fileexchange/36254-ticklabelformat-set-a-dynamic-format-of-axes-tick -labels 或通过谷歌搜索 'ticklabelformat matlab' 我通过更改第 105 行对其稍作修改,如下所示:
tickLabels = arrayfun(@(x)(FormatNumberScalarInputStrOutput`(x,format)),tickValues,'UniformOutput',false);`
代替奥特曼的版本:
tickLabels = arrayfun(@(x)(sprintf(format,x)),tickValues,'UniformOutput',false);
该更改通过 S. Lienhard 的函数 y = NumberFormatter( Numbers , FormatPattern ) 提供了千位逗号分隔符功能,也在 Matlab File Exchange 上。我修改后的 Lienhard 代码如下:
function y = FormatNumberScalarInputStrOutput(Number ,FormatPattern)
% adapted 12-2012 by D. Bourgoyne from NUMBERFORMATTER by S. Lienhard
%
% The pound sign (#) denotes a digit, the comma is a placeholder for the
% grouping separator, and the period is a placeholder for the decimal
% separator.
% The pattern specifies leading and trailing zeros, because the 0
% character is used instead of the pound sign (#).
%
% Examples:
% NumberFormatter(rand(5),'0.000')
% NumberFormatter(rand(5)*100,'###,###.000')
import java.text.*
v = DecimalFormat(FormatPattern);
y = char(v.format(Number));
您必须编写以下内容:
set(gcf, 'renderer', 'zbuffer')
您可以使用此代码来控制 y 轴刻度标签的格式。此代码源自 ticks_format.m 。
% 在这里设置首选的刻度格式。
y_formatstring = '%3.4f';
% 这是代码。
ytick = get(gca, 'ytick');
for i = 1:length(ytick)
yticklabel{i} = sprintf(y_formatstring, ytick(i));
end
set(gca, 'yticklabel', yticklabel)
在较新版本的 matlab (2016b) 上,您可以使用函数 ytickformat 和 xtickformat 轻松更改标签的格式。