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

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

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


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

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

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

Сбой bar3

3 ответа

Решение

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

РЕДАКТИРОВАТЬ

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