Форум кафедры Техники и Электрофизики Высоких Напряжений

Онлайн-сообщество ТВНщиков
Гостям форума:

Добро пожаловать на форум по технике высоких напряжений!
Для получения доступа ко всем разделам необходимо зарегистрироваться


Текущее время: 17 ноя 2018, 13:55

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
СообщениеДобавлено: 16 ноя 2009, 21:47 
Не в сети
Аватара пользователя

Зарегистрирован: 03 сен 2008, 16:08
Сообщения: 240
Откуда: Д-3
При построении графиков нередко возникает необходимость поставить стрелки, указывающие на определенные кривые, а также двойные стрелки между характерными уровнями на графике. Это можно сделать либо вручную через панель управления, либо программно. Для того чтобы поставить стрелку программно можно использовать функцию annotation, входными параметрами для которой являются название объекта (в данном случае 'doublearrow' - двойная стрелка) и его координаты (x,y). Вот таким вызовом команды можно поставить двойную стрелку на рисунок:
Код:
annotation('doublearrow',x,y)

Следует отметить, что параметры x, y являются приведенными координатами объекта в полотне графика и их значения должны находиться в диапазоне от 0 до 1. Гораздо же удобнее задавать координаты объектов (стрелок, линий и т.д.) по значениям осей графика xos, yos. Для преобразования значений координат объекта заданных по осям графика (xos, yos) в приведенные координаты полотна (x,y), можно использовать функцию dsxy2figxy:
Код:
[x,y] = dsxy2figxy(gca,xos,yos);

Важно указать, что функция dsxy2figxy, по крайней в версии MATLAB R2008a, не является стандартной. Код этой функции имеется в Help. Для того, чтобы функция dsxy2figxy работала, нужно скопировать код в новый m-файл и сохранить в текущей директории или в любом другом месте.

М-файл функции dsxy2figxy находится во вложении.

Пример 1
Код:
x = -2:0.001:2;
f1 = inline('exp(-x)'); % встраиваемая функция
f2 = inline('exp(-x).*cos(10*x)'); % встраиваемая функция
figure % создание нового окна под рисунок
plot(x,[f1(x);f2(x)],'k','LineWidth',1.5)
%%% первая стрелка %%%
xos1 = [0.25,-0.25]; % горизонтальные координаты концов стрелки
yos1 = [4,f1(xos1(2))]; % вертикальные координаты концов стрелки
[x1,y1] = dsxy2figxy(xos1,yos1); % пересчет координат осей графика
% в координаты полотна графика
annotation('arrow',x1,y1); % вызов одинарной стрелки
text(xos1(1)+0.05,yos1(1)+0.3,'\ite^x','Fontsize',12) % вставка надписи
%%% вторая стрелка %%%
xos2 = [-0.75,-1.15]; % горизонтальные координаты концов стрелки
yos2 = [5,f2(xos2(2))]; % вертикальные координаты концов стрелки
[x2,y2] = dsxy2figxy(xos2,yos2); % пересчет координат осей графика
% в координаты полотна графика
annotation('arrow',x2,y2); % вызов одинарной стрелки
text(xos2(1)+0.05,yos2(1)+0.3,'\ite^xcos(10x)','Fontsize',12) % вставка
% надписи
xlabel('\itx') % подпись оси абсцисс
ylabel('\itf(x)','Rotation',0) % подпись оси ординат

Результат исполнения кода:

Изображение

Пример 2
Код:
% Расчет функции распределения (в качестве примера)
mu0 = 1; % математическое ожидание
sigma = 0.5; % среднеквадратичное отклонение
a = mu0-sigma; % левая граница интервала
b = mu0+sigma; % правая граница интервала
Fa = cdf('Normal',a,mu0,sigma); % значение функции распределения при x = a
Fb = cdf('Normal',b,mu0,sigma); % значение функции распределения при x = b
% cdf позволяет рассчитать функцию распределения и имеет входные параметры:
% 'Normal' - название закона распределения (в данном случае нормальное)
% a или b - значения, для которых рассчитывается функция распределения
% mu0, sigma - параметры распределения
x = -2:0.001:4; % произвольный интервал значений случайной величины
Fx = cdf('Normal',x,mu0,sigma); % функции распределения
% функция распределения Fx рассчитана с целью построения ее графика

% Построение графика и его оформление
figure % создание нового окна под рисунок
plot(x,Fx,'LineWidth',1.5,'Color',[0 0 0]) % построение графика Fx
hold on
plot([x(1),a],[Fa,Fa],'-.',[x(1),b],[Fb,Fb],'-.','Color',[0 0 0])
% нанесение на график левой границы интервала a и нижнего уровня Fa
hold on
plot([a,a],[0,Fa],'-.',[b,b],[0,Fb],'-.','Color',[0 0 0])
% нанесение на график правой границы интервала b и верхнего уровня Fb
hold on
plot(a,Fa,'o',b,Fb,'o','Color',[0 0 0]) % нанесение маркеров на график
[arrowx1,arrowy1] = dsxy2figxy(gca, [-1,-1], [Fa,Fb]); % пересчет координат
% концов двойной стрелки заданных по осям графика в координаты окна графика
annotation('doublearrow',arrowx1,arrowy1); % нанесение двойной стрелки
text(-0.9,0.5,'\itP_{ab}=F_b- F_a','Fontsize',12) % нанесение надписи
text(-0.5,Fa+0.05,'\itF_a','Fontsize',12) % нанесение надписи
text(-0.5,Fb+0.05,'\itF_b','Fontsize',12) % нанесение надписи
text(a+0.1,0.04,'\ita','Fontsize',12) % нанесение надписи
text(b+0.1,0.04,'\itb','Fontsize',12) % нанесение надписи
xlabel('\itx') % подпись оси абсцисс
ylabel('\itF(X<x)') % подпсись оси ординат

Результат исполнения кода:

Изображение


У вас нет необходимых прав для просмотра вложений в этом сообщении.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
СообщениеДобавлено: 17 ноя 2009, 13:29 
Не в сети
Site Admin

Зарегистрирован: 03 сен 2008, 16:09
Сообщения: 4258
Откуда: Д-3
Очень здорово! :idea:
Всегда раздражало то, что аннотации приходится делать вручную.

Только пример оч. сложный получился, и для его понимания нужно знать теорвер и Statistics Toolbox. Живо представляю себе студентов, которые, беглым вглядом окинув код, тут же замечают "да-да, все понятно!" :-)

Марат, а можно перед этим примером сделать пример попроще? Например, с одиночной стрелкой и одной простой кривой?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
СообщениеДобавлено: 17 ноя 2009, 14:16 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 03 сен 2008, 17:00
Сообщения: 339
Откуда: Д-4а
Здорово! :clap:
Красота!
Но присоединяюсь к Даниилу Анатольевичу: пример слишком сложный для знакомства.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
СообщениеДобавлено: 17 ноя 2009, 23:53 
Не в сети
Site Admin

Зарегистрирован: 03 сен 2008, 16:09
Сообщения: 4258
Откуда: Д-3
Marat писал(а):
Изображение

:clap:


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
СообщениеДобавлено: 18 ноя 2009, 00:08 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 03 сен 2008, 17:00
Сообщения: 339
Откуда: Д-4а
Молодец, Марат!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
СообщениеДобавлено: 18 ноя 2009, 09:53 
Не в сети
Аватара пользователя

Зарегистрирован: 03 сен 2008, 16:08
Сообщения: 240
Откуда: Д-3
Спасибо :-)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
СообщениеДобавлено: 16 май 2010, 01:35 
Не в сети
Неунывающая
Аватара пользователя

Зарегистрирован: 19 окт 2009, 13:48
Сообщения: 852
Откуда: Д-3
Спасибо ))))

Думаю, мне вскоре очень пригодится в силу черно-белости подручных принтеров )))


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
СообщениеДобавлено: 29 апр 2011, 18:28 
Не в сети
Изучает еще один язык
Аватара пользователя

Зарегистрирован: 02 сен 2009, 20:50
Сообщения: 469
Откуда: из Ногинска
А как можно поменять шрифт на графике?

_________________
我愛 Matlab的


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
СообщениеДобавлено: 29 апр 2011, 19:25 
Не в сети
Аватара пользователя

Зарегистрирован: 03 сен 2008, 16:08
Сообщения: 240
Откуда: Д-3
Код:
figure
set(gcf,'defaultAxesFontName','Times New Roman')
% определение имени шрифта для нового окна

viewtopic.php?f=20&t=367


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
СообщениеДобавлено: 29 апр 2011, 21:05 
Не в сети
Изучает еще один язык
Аватара пользователя

Зарегистрирован: 02 сен 2009, 20:50
Сообщения: 469
Откуда: из Ногинска
Thank you!!!

_________________
我愛 Matlab的


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB