155GIT1 / 6. cvičení: Porovnání verzí
mBez shrnutí editace |
mBez shrnutí editace |
||
Řádek 1: | Řádek 1: | ||
{{Geoinformatika}} | {{Geoinformatika}} | ||
{{Cvičení|155GIT1|6| | {{Cvičení|155GIT1|6|Grafy funkcí}} | ||
== Náplň cvičení == | == Náplň cvičení == | ||
# | # grafické okno <code>figure</code> | ||
# | # grafy funkcí <code>plot(), subplot(), polar()</code> | ||
== Ukázky == | == Ukázky == | ||
=== | === Grafické okno === | ||
<source lang=octave> | |||
figure # -> 1 | |||
figure # -> 2 | |||
figure(4) # -> 4 | |||
</source> | |||
* Pro zavření všech grafických oken najednou funguje příkaz | |||
<source lang=octave> | |||
close all | |||
</source> | |||
=== Grafy funkcí === | |||
* <code>plot()</code> {{bullet}} [http://geo.fsv.cvut.cz/user/gin/git1/matlab.pdf#page=94 argumenty] | |||
<source lang=octave> | <source lang=octave> | ||
x = [0:3:360]; | |||
y = sin(x*pi/180); | |||
plot(x, y); | |||
% | |||
% nove okno | |||
figure(2) | |||
plot(x, y, 'r+') | |||
% | |||
% vice grafu najednou | |||
figure(3) | |||
z = cos(x*pi/180); | |||
plot(x, y, '--b', x, z, ':k'); | |||
</source> | |||
{{fig|octave-graf-1|<code>plot(x, y, '--b', x, z, ':k')</code>}} | |||
==== Popisky grafů ==== | |||
<source lang=octave> | |||
figure(4) | |||
hold on % zapne kresleni grafu do aktivniho okna bez vymazani predchoziho obsahu | |||
plot(x,y,'m'); | |||
plot(x,z,'b'); | |||
title('Funkce sinus a cosinus') | |||
xlabel('argument ve stupnich') | |||
ylabel('funkcni hodnota') | |||
xlim([0 360]) | |||
ylim([-1.2 1.2]) | |||
box on | |||
% | |||
% legenda | |||
legend('sinus','cosinus','Location','SouthWest') | |||
% prvni argumenty ('sinus','cosinus') jsou polozky legendy | |||
% 'Location' je jedna z vlastnosti objektu legend a bezprostredne po ni nasleduje nastaveni pripustne hodnoty teto vlastnosti ('SouthWest') | |||
% V Matlabu lze pouzit i vhodnejsi umisteni legendy (nejmensi kolize s grafem) | |||
legend('sinus','cosinus','Location','Best') | |||
% popr. zapis, ktery umisti legendu mimo plochu grafu | |||
legend('sinus','cosinus',-1) | |||
% | |||
grid on | |||
plot([0 360],[0 0],'k') % vykresleni osy x plnou cernou carou | |||
hold off | |||
</source> | </source> | ||
{{fig|octave-graf-4|Graf s popisky}} | |||
==== Více grafů v jednom okně ==== | |||
<source lang=octave> | <source lang=octave> | ||
x = 1:100; | |||
figure(5) | |||
% prvni graf | |||
subplot(2, 2, 1) | |||
plot(x, x) | |||
% druhy graf | |||
subplot(2, 2, 2) | |||
plot(x, sqrt(x)) | |||
% treti graf | |||
subplot(2, 2, 3) | |||
plot(x, log(x)) | |||
% ctvrty graf | |||
subplot(2, 2, 4) | |||
plot(x, x.^2) | |||
</source> | </source> | ||
=== | {{fig|octave-graf-2|<code>subplot()</code>}} | ||
==== Omezení oblasti grafu ==== | |||
<source lang=octave> | <source lang=octave> | ||
x = 0:0.1:5; | |||
y = exp(x); | |||
figure(6) | |||
% cely graf | |||
subplot(2, 1, 1) | |||
plot(x, y) | |||
% vysek grafu pro oblast x <1, 2>; y <0, 10> | |||
subplot(2, 1, 2) | |||
plot(x, y) | |||
axis([1,2,0,10]) | |||
</source> | |||
{{fig|octave-graf-3|<code>axis()</code>}} | |||
==== Graf s orientaci os v S-JTSK ==== | |||
Vstupní data: [http://geo102.fsv.cvut.cz/vyuka/155GIT1/data/body.txt body.txt] | |||
<source lang=octave> | <source lang=octave> | ||
% nacteni dat | |||
vstup = fopen('body.txt','r'); | |||
P = fscanf(vstup,'%f',[3 inf]); | |||
BYX = P'; | |||
fclose(vstup); | |||
% vypocet smerniku | |||
stan = [4001 730288.89 1054582.63]; % cb Y X (stanovisko) | |||
DY = BYX(:,2) - stan(2); | |||
DX = BYX(:,3) - stan(3); | |||
sig = atan2(DY,DX); % v radianech | |||
sig = sig*200/pi; | |||
% prevod smerniku do intervalu <0,400> | |||
for i=1:length(sig) | |||
if sig(i)<0 | |||
sig(i)=sig(i)+400; | |||
end | |||
end | |||
sig % kontrolni zobrazeni vypoctenych hodnot smerniku | |||
% kontrolni graf v JTSK | |||
figure(7) | |||
x = BYX(:,3); | |||
y = BYX(:,2); | |||
cb = BYX(:,1); | |||
plot(-y,-x,'.r',-1*stan(2),-1*stan(3),'.b'); | |||
for i=1:size(BYX,1) | |||
cislab = num2str(cb(i)); % prevod numericke hodnoty na format string | |||
text(-y(i)+0.4,-x(i),cislab); | |||
end | |||
cislos = stan(1); | |||
text(-1*stan(2),-1*stan(3),num2str(cislos)); | |||
title('body v JTSK'); | |||
xlabel('Y'); ylabel('X'); | |||
% | |||
% v Matlabu je mozne i dalsi siroke ovladani vzhledu grafu, napr.: | |||
% ---------------------------------------------------------------- | |||
% nastaveni pozice popisu os pro aktivni osy | |||
set(gca,'XAxisLocation','top','YAxisLocation','right'); % gca - vrati identifikator pro objekt aktivnich os | |||
% | |||
% zapis spravnych numerickych hodnot poradnic na (matlabovske) ose x | |||
krokx = 10; % rozestup poradnic | |||
poradnicex = (-1*ceil(max(y)/10)*10) : krokx : (-1*floor(min(y)/10)*10) % definice okrouhlych hodnot poradnic | |||
xlim([poradnicex(1) poradnicex(end)]); | |||
set(gca,'XTick',poradnicex); % definice rysek poradnic | |||
set(gca,'XTickLabel',sprintf('%.0f|',-poradnicex)); % definice popisu rysek poradnic spolu s nastavenim jejich formatu | |||
% | |||
% zapis spravnych numerickych hodnot poradnic na (matlabovske) ose y | |||
kroky = 10; | |||
poradnicey = (-1*ceil(max(x)/10)*10) : kroky : (-1*floor(min(x)/10)*10) | |||
ylim([poradnicey(1) poradnicey(end)]); | |||
set(gca,'YTick',poradnicey); | |||
set(gca,'YTickLabel',sprintf('%.0f|',-poradnicey)); | |||
</source> | </source> | ||
==== Polární graf ==== | |||
* např. zobrazení polohy satelitu (tzv. Skyplot) | |||
<source lang=octave> | <source lang=octave> | ||
ele = [80 30 10 50]; % elevacni uhel satelitu [°] | |||
azi = [10 110 220 330]; % azimut satelitu [°] | |||
azi = azi*pi/180; | |||
figure(8) | |||
polar(pi/2-azi,90-ele,'*'); | |||
</source> | </source> | ||
== Úlohy == | == Úlohy == | ||
* [[155GIT1 / | * [[155GIT1 / 9. cvičení / Příklady|9. cvičení - příklady]] |
Verze z 26. 2. 2020, 17:42
Grafy funkcí
Náplň cvičení
- grafické okno
figure
- grafy funkcí
plot(), subplot(), polar()
Ukázky
Grafické okno
figure # -> 1
figure # -> 2
figure(4) # -> 4
- Pro zavření všech grafických oken najednou funguje příkaz
close all
Grafy funkcí
plot()
• argumenty
x = [0:3:360];
y = sin(x*pi/180);
plot(x, y);
%
% nove okno
figure(2)
plot(x, y, 'r+')
%
% vice grafu najednou
figure(3)
z = cos(x*pi/180);
plot(x, y, '--b', x, z, ':k');

plot(x, y, '--b', x, z, ':k')
Popisky grafů
figure(4)
hold on % zapne kresleni grafu do aktivniho okna bez vymazani predchoziho obsahu
plot(x,y,'m');
plot(x,z,'b');
title('Funkce sinus a cosinus')
xlabel('argument ve stupnich')
ylabel('funkcni hodnota')
xlim([0 360])
ylim([-1.2 1.2])
box on
%
% legenda
legend('sinus','cosinus','Location','SouthWest')
% prvni argumenty ('sinus','cosinus') jsou polozky legendy
% 'Location' je jedna z vlastnosti objektu legend a bezprostredne po ni nasleduje nastaveni pripustne hodnoty teto vlastnosti ('SouthWest')
% V Matlabu lze pouzit i vhodnejsi umisteni legendy (nejmensi kolize s grafem)
legend('sinus','cosinus','Location','Best')
% popr. zapis, ktery umisti legendu mimo plochu grafu
legend('sinus','cosinus',-1)
%
grid on
plot([0 360],[0 0],'k') % vykresleni osy x plnou cernou carou
hold off

Více grafů v jednom okně
x = 1:100;
figure(5)
% prvni graf
subplot(2, 2, 1)
plot(x, x)
% druhy graf
subplot(2, 2, 2)
plot(x, sqrt(x))
% treti graf
subplot(2, 2, 3)
plot(x, log(x))
% ctvrty graf
subplot(2, 2, 4)
plot(x, x.^2)

subplot()
Omezení oblasti grafu
x = 0:0.1:5;
y = exp(x);
figure(6)
% cely graf
subplot(2, 1, 1)
plot(x, y)
% vysek grafu pro oblast x <1, 2>; y <0, 10>
subplot(2, 1, 2)
plot(x, y)
axis([1,2,0,10])

axis()
Graf s orientaci os v S-JTSK
Vstupní data: body.txt
% nacteni dat
vstup = fopen('body.txt','r');
P = fscanf(vstup,'%f',[3 inf]);
BYX = P';
fclose(vstup);
% vypocet smerniku
stan = [4001 730288.89 1054582.63]; % cb Y X (stanovisko)
DY = BYX(:,2) - stan(2);
DX = BYX(:,3) - stan(3);
sig = atan2(DY,DX); % v radianech
sig = sig*200/pi;
% prevod smerniku do intervalu <0,400>
for i=1:length(sig)
if sig(i)<0
sig(i)=sig(i)+400;
end
end
sig % kontrolni zobrazeni vypoctenych hodnot smerniku
% kontrolni graf v JTSK
figure(7)
x = BYX(:,3);
y = BYX(:,2);
cb = BYX(:,1);
plot(-y,-x,'.r',-1*stan(2),-1*stan(3),'.b');
for i=1:size(BYX,1)
cislab = num2str(cb(i)); % prevod numericke hodnoty na format string
text(-y(i)+0.4,-x(i),cislab);
end
cislos = stan(1);
text(-1*stan(2),-1*stan(3),num2str(cislos));
title('body v JTSK');
xlabel('Y'); ylabel('X');
%
% v Matlabu je mozne i dalsi siroke ovladani vzhledu grafu, napr.:
% ----------------------------------------------------------------
% nastaveni pozice popisu os pro aktivni osy
set(gca,'XAxisLocation','top','YAxisLocation','right'); % gca - vrati identifikator pro objekt aktivnich os
%
% zapis spravnych numerickych hodnot poradnic na (matlabovske) ose x
krokx = 10; % rozestup poradnic
poradnicex = (-1*ceil(max(y)/10)*10) : krokx : (-1*floor(min(y)/10)*10) % definice okrouhlych hodnot poradnic
xlim([poradnicex(1) poradnicex(end)]);
set(gca,'XTick',poradnicex); % definice rysek poradnic
set(gca,'XTickLabel',sprintf('%.0f|',-poradnicex)); % definice popisu rysek poradnic spolu s nastavenim jejich formatu
%
% zapis spravnych numerickych hodnot poradnic na (matlabovske) ose y
kroky = 10;
poradnicey = (-1*ceil(max(x)/10)*10) : kroky : (-1*floor(min(x)/10)*10)
ylim([poradnicey(1) poradnicey(end)]);
set(gca,'YTick',poradnicey);
set(gca,'YTickLabel',sprintf('%.0f|',-poradnicey));
Polární graf
- např. zobrazení polohy satelitu (tzv. Skyplot)
ele = [80 30 10 50]; % elevacni uhel satelitu [°]
azi = [10 110 220 330]; % azimut satelitu [°]
azi = azi*pi/180;
figure(8)
polar(pi/2-azi,90-ele,'*');