Подавление экспоненциального форматирования в тиках фигур

Отметьте метки для тиков больше, чем около 10 000, например, отформатируйте их до 1x10 ^ 4. В то время как экспоненциальная часть появляется над соответствующими осями. Это неправильное поведение было хорошо описано на на центральном уровне Matlab, но без решения.

Спасибо за вашу помощь.


"Быстрый трюк"

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

не работает при применении к bar3, как видно на следующем рисунке.

bar3 plot failing

Ответы

Ответ 1

Один из способов улучшить контроль над тиковыми метками и избежать экспоненциального форматирования - использовать TICK2TEXT из File Exchange,

Вот пример:

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

Ответ 2

ИЗМЕНИТЬ

В соответствии с этой страницей техническим решением рекомендуется рекомендуемый способ форматирования ярлыков меток (вы можете использовать любую из функций форматирования чисел, таких как: NUM2STR, SPRINTF, MAT2STR или любой другой.)

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

alt text

Однако, кажется, что есть ошибка, когда дело доходит до оси Z (метки правильно отформатированы, но экспоненциальный множитель по-прежнему показывается по какой-либо причине!)

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

alt text

Наконец, есть еще одно обходное решение, в котором мы заменяем метки тика текстовыми объектами (см. эту страницу

Ответ 3

Еще один трюк, который вы можете попробовать, - это масштабировать свои данные до его построения, а затем масштабировать метки ярлыков, чтобы они выглядели так, что они построены в другом масштабе. Вы можете использовать функцию 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