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

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

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


«Быстрый трюк»

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

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

bar3 plot failing

13
задан Infinite Recursion 18 June 2014 в 15:18
поделиться

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
1
ответ дан 2 December 2019 в 00:57
поделиться

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

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

Наконец, есть еще один обходной путь, когда мы заменяем галочки текстовыми объектами (см. страницу технического решения в качестве справки):

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

8
ответ дан 2 December 2019 в 00:57
поделиться

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

Похожие вопросы: