2017-01-23 4 views
1

У меня есть положительный вектор натурального числа, который я рисую в Matlab, используя типичную функцию plot(). Вот пример участка:Matlab 2D plot - ось отображения в двоичном формате

Plotting a natural number vector, axis in radix-10, need to display them in radix-2

Однако, я должен видеть вектор (ось Y) отображается в двоичном коде. Есть ли способ изменить отображение оси в двоичном формате (radix-2)? Я попытался использовать dec2bin, но он только преобразует целые числа в строки, которые невозможно построить.

ответ

3

Как об этом:

L = get(gca,'YTickLabel'); 
set(gca,'YTickLabel',cellfun(@(x) dec2bin(str2num(x)),L,'UniformOutput',false)); 

редактировать: Так как вы хотите, возможность масштабирования, вот способ сделать ось масштабируемой:

zh = zoom(gcf); 
set(zh,'ActionPreCallBack',@(source,event,s) set(gca,'YTickLabelMode','auto')) 
set(zh,'ActionPostCallBack',@(source,event,s) set(gca,'YTickLabel',cellfun(@(x) dec2bin(str2num(x)),get(gca,'YTickLabel'),'UniformOutput',false))); 

Он сбрасывает ось в десятичную перед масштабированием, а затем после масштабирования преобразуется обратно в двоичный.

+0

Это работает, но все еще есть проблема. Он отображает двоичные, но неправильные значения. Например. вместо отображения точки 766 она отображает 750. Смещение 16? Однако в точке 754 он отображает 760. Кажется, что существует некоторое зависящее от числа смещение. –

+0

Хм, это странно. Ты уверен? Кажется, это работает для меня, вот пример, где я показываю оба: https://i.stack.imgur.com/RSG6s.png – Florian

+0

Я понял, что он работает, только если вы не пытаетесь масштабировать. Как только я увеличиваю масштаб, это происходит неправильно. Вот пример: https://drive.google.com/file/d/0B5A_hdYOfvtLWGktbmJnRlowNjQ/view?usp=sharing –

Смежные вопросы