【问题标题】:Suppress exponential formatting in figure ticks抑制图形刻度中的指数格式
【发布时间】:2011-04-05 00:51:42
【问题描述】:

刻度大于 10'000 的刻度标签,例如格式化为 1x10^4。而指数部分出现在相应轴的上方。 on matlab central 也很好地描述了这种不当行为,但没有解决方案。

感谢您的帮助。


“快速技巧”

set(gca, 'YTickLabel',get(gca,'YTick'))

应用于 bar3 时不起作用,如下图所示。

【问题讨论】:

  • 看你链接的帖子,我看到tick2textmathworks.com/matlabcentral/fileexchange/…),似乎完美解决了问题。
  • tick2text 格式化刻度标签,但轴上方的指数部分仍然存在,这看起来很奇怪。上面给出的新闻帖子注意到了同样的问题。
  • tick2text 旁边的图片 (mathworks.com/matlabcentral/fx_files/16003/4/…) 似乎另有说明。图有错吗?
  • 好点!不幸的是,我没有手头的问题的数字。这是一个带有颜色条和 cmfreeze vodoo 的 bar3 图。我承认对图形进行了相当多的调整。
  • 以下示例代码按预期工作!我会用真实样本再次检查tick2text。 y = 酷(7); fh = 图; bar3(y*1E6,'分离');斧头 = gca(fh); tick2text(ax, 'ztickoffset' ,-1.15,'zformat', '%5.0f', 'axis','z')

标签: matlab plot labels number-formatting


【解决方案1】:

编辑

根据这个technical solution page,格式化刻度标签的推荐方法是这样的(您可以使用任何数字格式化函数,如 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')'))

最后,还有另一种解决方法,我们用文本对象替换刻度标签(参见 technical solution page 作为参考):

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','')

【讨论】:

  • 感谢您的解决方案!当我在谷歌上搜索解决方案时,我确实也找到了您引用的“技术解决方案”,但没有看到它的相关性。该问题现已准备好提交给 MathWorks 支持!
【解决方案2】:

您可以尝试的另一个技巧是在绘制数据之前缩放数据,然后缩放刻度标签以使其看起来是以不同的比例绘制的。您可以使用函数LOG10 来帮助您根据绘制的值自动计算适当的比例因子。假设你的数据在变量xy 中,你可以试试这个:

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

【讨论】:

  • 很好的解决方案,但我可能更喜欢处理图形部分而不是数据。
  • @zellus 你应该能够使用hgtransform 对象来缩放显示的数据。这就是我们最终使用的解决方案。绘图数据不受干扰,但显示为其实际值的 1/1000。
  • 太棒了。如何转换轴上的值非常重要。
【解决方案3】:

更好地控制刻度标签并避免指数格式的一种方法是使用文件交换中的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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-10
    • 2014-03-22
    • 2015-09-29
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    相关资源
    最近更新 更多