Suppress exponential formatting in figure ticks

后端 未结 3 1282
余生分开走
余生分开走 2020-11-28 13:10

Tick labels for ticks bigger than about 10\'000, get formatted to 1x10^4 for example. Whereas the exponential part appears above the corresponding axes. This misbehavior has

相关标签:
3条回答
  • 2020-11-28 13:16

    One way to get better control over tick labels, and to avoid the exponential formatting, is to use TICK2TEXT from the File Exchange.

    Here's an example:

    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
    
    0 讨论(0)
  • 2020-11-28 13:32

    EDIT

    According to this technical solution page, the recommended way of formatting the tick labels is this (you can use any of the number formatting functions like NUM2STR, SPRINTF, MAT2STR, or any other..)

    y = cool(7);
    bar(y(:,1)*1e6)
    set(gca, 'YTickMode','manual')
    set(gca, 'YTickLabel',num2str(get(gca,'YTick')'))
    

    alt text

    However there seems to be a bug when it comes to the Z-axis (the labels are correctly formatted, but the exponential multiplier is still showing for some reason!)

    y = cool(7);
    bar3(y*1e6, 'detached')
    set(gca, 'ZTickMode','manual')
    set(gca, 'ZTickLabel',num2str(get(gca,'ZTick')'))
    

    alt text

    Finally, there's another workaround where we replace the tick labels with text objects (see this technical solution page as reference):

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

    alt text

    0 讨论(0)
  • 2020-11-28 13:40

    One other trick you can try is to scale your data before you plot it, then scale the tick labels to make it appear that it is plotted on a different scale. You can use the function LOG10 to help you automatically compute an appropriate scale factor based on your plotted values. Assuming you have your data in variables x and y, you can try this:

    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
    
    0 讨论(0)
提交回复
热议问题