当刻度大于约10,000时,刻度标签将被格式化为1x10^4。指数部分出现在相应的轴上方,这种行为已经在matlab central上得到了很好的描述,但没有解决方案。
谢谢您的帮助。
这是一个“快速��巧”:
set(gca, 'YTickLabel',get(gca,'YTick'))
如下图所示,当应用于bar3时,未能起作用。
当刻度大于约10,000时,刻度标签将被格式化为1x10^4。指数部分出现在相应的轴上方,这种行为已经在matlab central上得到了很好的描述,但没有解决方案。
谢谢您的帮助。
这是一个“快速��巧”:
set(gca, 'YTickLabel',get(gca,'YTick'))
如下图所示,当应用于bar3时,未能起作用。
编辑
根据这个技术解决方案页面,建议格式化刻度标签的方法是这样的(您可以使用任何数字格式化函数,如NUM2STR、SPRINTF、MAT2STR或其他任何函数...)
y = cool(7);
bar(y(:,1)*1e6)
set(gca, 'YTickMode','manual')
set(gca, 'YTickLabel',num2str(get(gca,'YTick')'))
然而,当涉及到Z轴时似乎存在一个错误(标签格式正确,但指数乘数仍然显示出来!)
y = cool(7);
bar3(y*1e6, 'detached')
set(gca, 'ZTickMode','manual')
set(gca, 'ZTickLabel',num2str(get(gca,'ZTick')'))
最后,还有一种解决方法是用文本对象替换刻度标签(参见此技术解决方案页面):
y = cool(7);
bar3(y*1e6, 'detached')
offset = 0.25; Xl=get(gca,'XLim'); Yl=get(gca,'YLim'); Zt=get(gca,'ZTick');
t = text(Xl(ones(size(Zt))),Yl(ones(size(Zt)))-offset,Zt, num2str(Zt')); %#'
set(t, 'HorizontalAlignment','right', 'VerticalAlignment','Middle')
set(gca, 'ZTickLabel','')
你可以尝试的另一个技巧是在绘图之前对数据进行缩放,然后缩放刻度标签,使其看起来像是在不同的比例尺上绘制的。你可以使用函数LOG10,根据你的绘制值自动计算适当的比例因子。假设你的数据存储在变量x
和y
中,你可以尝试这样做:
scale = 10^floor(log10(max(y))); %# Compute a scaling factor
plot(x,y./scale); %# Plot the scaled data
yTicks = get(gca,'YTick'); %# Get the current tick values
set(gca,'YTickLabel',num2str(scale.*yTicks(:),'%.2f')); %# Change the labels
hgtransform
对象来缩放显示的数据。那就是我们最终采用的解决方案。绘图数据不受影响,但以其实际值的1/1000显示。 - KitsuneYMG获得更好的刻度标签控制并避免使用指数格式的一种方法是使用来自文件交换中心的TICK2TEXT。
这里有一个例子:
y = cool(7); %# define some data
ah = axes; %# create new axes and remember handle
bar3(ah,y*1E6,'detached'); %# create a 3D bar plot
tick2text(ah, 'ztickoffset' ,-1.15,'zformat', '%5.0f', 'axis','z') %# fix the tick labels
tick2text
(http://www.mathworks.com/matlabcentral/fileexchange/16003-tick2text-create-easy-to-customize-tick-labels)的工具,似乎完美地解决了这个问题。 - Jonastick2text
所附的图片(http://www.mathworks.com/matlabcentral/fx_files/16003/4/tick2textexample.png)似乎表明情况并非如此。这张图片是错误的吗? - Jonas