2013-11-30 2 views
1

Я пытаюсь удалить Matlab-заданные единицы из этого сюжета, но я не нашел способ:удаление единицы из участка

figure(1) 
hold on 
set(gcf,'PaperUnits','centimeters',... 
     'PaperSize',[15 9],... 
     'PaperPosition',[0 0 15 9]); 
pzmap(LB); sgrid; grid on; axis equal; 
title(''); 
xlabel('\sigma [rad/s]') 
ylabel('\omega [rad/s]') 
hold off 

После этого команды xlabel выглядит следующим образом: \sigma [rad/s] (seconds^-1). Секунды идут с pzmap. Как я могу их удалить?


я нашел, какой-то странный behavour: Если генерировать код менеджером фигуры сюжета, я получаю это:

% Create xlabel 
xlabel('\sigma [rad/s] (seconds^{-1})','Units','pixels'); 

Почему ???


Теперь я понимаю - без pzmap/pzplot

pol = pole(sys) 

figure(1) 
plot(real(pol(:)),imag(pol(:)),'x') 
title(''); 
xlabel('\sigma [rad/s]'); 
ylabel('\omega [rad/s]'); 
sgrid 

ответ

1

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

sys = rss(3,2,2); 
h = pzplot(sys); 
sgrid; 
axis equal; 

Мы можем с помощью опций pzplot с getoptions:

p = getoptions(h) 

Чтобы установить метки и единицы, как вы хотите, вы можете попробовать это, используя setoptions:

p.Title.String = ''; 
p.XLabel.String = '\sigma'; 
p.YLabel.String = '\omega'; 
setoptions(h,p); 

Я считаю, что единицы о f 'seconds -1', что отображение графика эквивалентно 'rad/s', которое вы хотите указать. Я знаю, что эти два взгляда очень разные (я предпочитаю быть конкретными только для радианов), но это недостаток использования такой функции графика, которая пытается сделать все для вас. Если вы хотите удалить строку по умолчанию или добавить другой вариант, вам, вероятно, придется немного взломать уровень. Более простым способом может быть использование команды «Generate Code...» («Сгенерировать M-файл ...» в более старых версиях ») в меню« Файл »на панели инструментов рисунка и отредактировать метки графика там (есть также программная .. вариант для этого on the File Exchange) или вы могли бы выводиться в формате PostScript и редактировать что

в качестве альтернативы, вы можете использовать pzoptions, чтобы создать список опций для передачи pzplot или pzmap (не документированы в последнем случае):

p = pzoptions; 
p.Title.String = ''; 
p.XLabel.String = '\sigma'; 
p.YLabel.String = '\omega'; 
sys = rss(3,2,2); 
pzplot(sys,p); 
sgrid; 
axis equal; 

Вы увидите, что по некоторым причинам размер текста в этом случае намного меньше. pzplot и pzmap должен установить размер шрифта до 10. Вы могли бы легко сделать это.

Подробнее о настройке этого и связанных с ним панелей инструментов управления, see this article.

+0

Хм - Я нашел, что Matlab говорит, что он должен добавить TimeUnit. Я могу изменить его только на год, месяц и т. Д. Справка Matlab не показывает мне, чтобы этот ярлык. Если есть возможность получить только сетку да сюжет один? – Alex44

+0

Точно, нет никакого способа, не создавая собственную копию 'pzplot' и не выясняя, как взломать ее или посмотреть, можете ли вы найти, где/где метки хранятся в объекте' figure' (начинаются с 'get (gcf) 'и go копать). Я думаю, что опция «Создать код ...» - это ваша самая лучшая/простая ставка на этом этапе, так как она приводит к генерическим вызовам «xlabel» и «ylabel», которые будут легко меняться. – horchler

+0

В этом суть. Вы не можете его найти. – Alex44

0

После интенсивного низкоуровневого рытья на самом деле существует довольно простой способ переопределить поведение по умолчанию.

p = pzplot(sys); 
p.AxesGrid.XUnits = 'rad/s'; 
p.AxesGrid.YUnits = 'rad/s'; 

Изменения вступят в силу немедленно. Я даже попытался установить значение ни к чему, то есть

p.AxesGrid.XUnits = ''; 

и эффективно удаляет раздражающий скобку с единицами. Технически Matlab создает элемент пользовательского класса, который они хранят под именем AxesGrid в экземпляре класса resppack.mpzplot, с некоторым стандартным LTI-поведением. Возможно, вы можете обойти некоторые вещи, «впрыскивая» сценарий с тем же именем, что и одна из стандартных функций библиотеки, чтобы он был вызван вместо этого и изменил ситуацию там, но это самое близкое, что я пришел к тому, чтобы удалить эти раздражающих единиц в нескольких строках.

В стороне информации, объект AxesGrid инициализируется в ... \ controllib \ график \ @resppack \ @pzplot \ initialize.m если вы хотите, чтобы проверить его.

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