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

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

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


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

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

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

bar3 plot failing

Ответы [ 3 ]

8 голосов
/ 28 августа 2010

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

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

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

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

3 голосов
/ 28 августа 2010

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

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