Plotki

Transkrypt

Plotki
Plotki
Wstęp
Wybrane wbudowane funkcje graficzne:
funkcja
Plot@y, 8x, xmin , xmax <D
ListPlot@listD
ParametricPlot@8x, y<, 8t, tmin , tmax <D
DensityPlot@f, 8x, xmin , xmax <, 8y, ymin , ymax <D
ContourPlot@f, 8x, xmin , xmax <, 8y, ymin , ymax <D
Plot3D@z, 8x, xmin , xmax <, 8y, ymin , ymax <D
ParametricPlot3D@8x, y, z<, 8t, tmin , tmax <D
ListPlot3D@listD
opis
wykres funkcji y@xD lub listy funkcji
wykres listy punktów 8x, y<
wykres krzywej zadanej parametrycznie
wizulizacja f@x, yD typu "mapa"
poziomice f@x, yD
wykres z@x, yD lub listy
krzywa lub powierzchnia parametrycznie
wykres listy punktów 8x, y, z<
Wybrane standardowe pakiety graficzne. Aby uŜyć funkcje z pakietu naleŜy załadować go do pamięci. Wszystkie
znajduj± się w katalogu Graphics, więc komenda będzie miała kształt Needs["Graphics`NazwaPakietu`"] (uwaga
na apostrofy!), np. Needs["Graphics`ImplicitPlot`"].
pakiet
Graphics
Graphics3D
ImplicitPlot
MultipleListPlot
PlotField
Legend
ParametricPlot3D
ContourPlot3D
Shapes
Polyhedra
Wygodniej jednak jest wykonać komendę Needs[Graphics`Master`], która nie ładuje bezpo¶redni Ŝadnego pakietu,
ale sprawia, Ŝe wpisana funkcja będzie ładowana automatycznie (zob. inicjalizację w następnym punkcie). szczegóły o
kaŜdym pakiecie w helpie.
2
LAB04.NB
Inicjalizacja
ClearAll@"Global`∗"D;
Off@General::spell, General::spell1D;
$TextStyle = 8FontFamily → "Times", FontSize → 12<;
Lista wbudowanych symboli typu "plot"
? *Plot*
Załadowanie pakietu "master"
Needs@"Graphics`Master`"D
Powiększona lista symboli typu "plot"
? *Plot*
Wykres funkcji jednej zmiennej
à Podstawowa składnia
Plot[f,{x,xmin,xmax},opts]
Plot@ ArcCosh@xD, 8x, 1, 10<D
3
Narysować ÅÅÅÅÅÅÅÅ
ÅxÅÅÅÅÅÅÅÅÅÅÅÅ dla dodatnich x.
Exp@xD+1
à Typowe kłopoty
Nie moŜe być danych symbolicznych (...is not a machine − size real number...)
Plot@Cos@k xD, 8x, −1, 1<D ; H∗ Ľle! k nie jest okre¶lone∗L
Plot@Cos@Pi xD, 8x, −1, 1<D ; H∗ OK∗L
k = Pi;
Plot@Cos@k xD, 8x, −1, 1<D ; H∗ OK −
MoŜna rysować zdefiniowane funkcje
f@x_D := x Cos@π xD
k nadano wcze¶niej warto¶ć∗L
3
LAB04.NB
Plot@f@xD, 8x, −1, 1<D;
Ale bywaj± z tym kłopoty (kiedy funkcja nie jest w pełni obliczona w momencie rysowania):
g@x_D :=
y@xD ê. NDSolve@8y @xD == x Sin@xD, y@0D == 0, y′ @0D == 1<, y@xD, 8x, 0, 10<D
Plot@g@xD, 8x, 0, 5<D;
Uniwersaln± rad± na to jest uŜycie funkcji Evaluate, która wymusza wykonanie wszystkich obliczeń przed rysowaniem
Plot@Evaluate@g@xDD, 8x, 0, 10<D;
à Wykresy listy funkcji
Plot@8LaguerreL@1, xD, LaguerreL@2, xD, LaguerreL@3, xD<, 8x, 0, 10<D;
Plot@ Evaluate@ Table@LegendreP@n, xD, 8n, 0, 10<DD, 8x, −1, 1<D;
à Polerowanie rysunku
Opcje dla Plot
Options@PlotD
Etykiety osi i tytuły
Plot@Gamma@xD, 8x, −5, 5<,
AxesLabel → 8"x", "Γ@xD"<, PlotLabel → "Gamma Function"D;
Linie siatki
Plot@Gamma@xD, 8x, −5, 5<, GridLines → Automatic, Frame → True,
FrameLabel → 8"x", "Γ@xD"<, PlotLabel → "Gamma Function"D;
Zakres zmiennych na rysunku
PlotRange->{{xmin,xmax},{ymin,ymax}}
Plot@Tan@xD, 8x, −π, π<D;
Plot@Tan@xD, 8x, −π, π<, PlotRange → 8Automatic, 8−5, 5<<D;
tanPlot = Plot@Tan@xD, 8x, −π, π<, PlotRange → 8−5, 5<D;
Wygładzanie
PlotPoints-> n
(zob równieŜ MaxBend i PlotDivision)
Plot@H1 + Tanh@x2 Sin@xDDL ê 2, 8x, 0, 100<D;
4
LAB04.NB
"Odkrycie" okresowo¶ci
Plot@H1 + Tanh@x2 Sin@xDDL ê 2, 8x, 0, 100<, PlotPoints → 100D;
Aspect ratio
è!!!!!!!!!!!!!!
è!!!!!!!!!!!!!!
PlotA9 1 − x2 , − 1 − x2 =, 8x, −1, 1<E;
è!!!!!!!!!!!!!!
è!!!!!!!!!!!!!!
PlotA9 1 − x2 , − 1 − x2 =, 8x, −1, 1<, AspectRatio → 1E;
? GoldenRatio
Modyfikacja stylu rysowania krzywych
PlotStyleØ{styl} lub dla listy funkcji PlotStyleØ{{styl1},{styl2},...} gdzie kaŜdy {styl} jest list± tzw. dyrektyw
graficznych np. Dashing, RGBColor, Hue, Thickness. JeŜeli lista funkcji jest dłuŜsza niŜ lista stylów, to s± one
stosowane cyklicznie.
In[3]:=
line@1D = [email protected], 0.02<D, RGBColor@1, 0, 0D, [email protected]<;
line@2D = [email protected], 0.02<D, RGBColor@0, 1, 0D, [email protected]<;
line@3D = [email protected], 0.02<D, RGBColor@0, 0, 1D, [email protected]<;
In[6]:=
lines = Table@line@nD, 8n, 3<D;
In[7]:=
Plot@ Evaluate@ Table@LegendreP@n, xD, 8n, 0, 4<DD,
8x, −1, 1<, PlotStyle → linesD;
Style dla tekstu
Na przykład przez modyfikację zmiennej systemowej $TextStyle (pocz±tkowo pustej), która decyduje jakie atrybuty
ma tekst i etykiety rysunku.
In[16]:=
$TextStyle = 8FontFamily → "Times", FontSize → 12<;
In[13]:=
plotGamma := Plot@Gamma@xD, 8x, −5, 5<, GridLines → Automatic,
Frame → True, FrameLabel → 8"x", "Γ@xD"<, PlotLabel → "Gamma Function"D;
In[18]:=
$TextStyle = 8FontFamily → "Courier", FontSize → 12<;
In[19]:=
plotGamma;
Opcje dla TextStyle:
á FontFamily ~ "Courier", "Times" i "Helvetica", wiele zaleŜy od systemu np tu moŜe być "Times-New-Roman".
á FontWeight ~ "Plain", "Bold" lub "ExtraBold"
á FontSlant ~ "Plain" lub "Italic"
á FontSize ~ w punktach drukarskich
á FontColor ~ przy pomocy GreyLevel, RBGColor , CMYKColor lub Hue
á Background ~ j.w.
5
LAB04.NB
$TextStyle = 8FontFamily → "Courier",
FontSize → 16, FontSlant → "Italic", FontWeight → "Bold"<;
plotGamma;
$TextStyle = 8FontFamily → "Times", FontSize → 12<;
à Odczytywanie współrzędnych z ryunku
x
Równanie przestępne ÅÅÅÅÅÅÅÅ
Å2ÅÅÅÅÅÅÅ
Å2ÅÅÅ!Å ã Cot@xD . Wobec kłopotów z rozwi±zaniem symbolicznym próbujemy rozwi±zać
è!!!!!!!!!!!!!!!!
b -x
graficznie
ξ
lhs = ; rhs = Cot@ξD;
è!!!!!!!!!!!!!!!!!
β2 − ξ2
Plot@Evaluate@8lhs, rhs< ê. β → 5D,
8ξ, 0, 5<, PlotRange → 8Automatic, 80, 5<<D;
Odczytujemy wspólrzędne punktów przecięcia z rysunku. Jak? Wybierz Input->Get Graphics Coordinates i przeczytaj instrukcję. Otrzymujemy (mniej, więcej)
81.3035, 0.325631<; 83.82772, 1.24741<;
JeŜeli potrzebujemy dokładniejsze przybliŜenie moŜemy uŜyć funkcji numerycznej FindRoot (zob. Help) gdzie
znalezione rozwi±zanie staje się punktem startowym metody.
eq = Hlhs == rhsL ê. β → 5;
FindRoot@eq, 8ξ, 1.3<D
FindRoot@eq, 8ξ, 3.8<D
x
Rozwi±zać w podobny sposób Sin@xD == Log@ ÅÅÅÅ
ÅÅÅÅÅ D.
x-1
Manipulowanie obiektami graficznymi
à Sterowanie wy¶wietlaniem na ekranie
Jak interpretowany jest otrzymany w wyniku komendy graficznej obiekt (opis postscriptowy) jest opisane w zmiennej
systemowej $DisplayFunction (standardowo wy¶wietlenie na ekranie). MoŜemy to zmieniać przy pomocy opcji
DisplayFunction. W szczególno¶ci DisplayFunction->Identity zachowuje obiekt w pamięci, ale nie wy¶wietla go na
ekranie, natomiast DisplayFunction->$DisplayFunction przywraca ustawienie standardowe. Obiekty zachowane w
pamięci moŜemy wy¶wietlać przy pomocy komendy Show.
6
LAB04.NB
In[20]:=
Clear@x, v, a, tD;
x@tD = Cos@tD; v@tD = D@x@tD, tD; a@tD = D@v@tD, tD;
plot@xD = Plot@Evaluate@x@tDD, 8t, 0, 2 π<, DisplayFunction → IdentityD;
plot@vD = Plot@Evaluate@v@tDD, 8t, 0, 2 π<, DisplayFunction → IdentityD;
plot@aD = Plot@Evaluate@a@tDD, 8t, 0, 2 π<, DisplayFunction → IdentityD;
In[25]:=
Show@plot@vD, DisplayFunction → $DisplayFunctionD;
à Jednoczesne wy¶wietlanie kilku obiektów graficznych
In[26]:=
Show@8plot@xD, plot@vD, plot@aD<, DisplayFunction → $DisplayFunctionD;
à Przykład uzycia komend graficznych w definicji funkcji
Uwaga: potrójny znak podkre¶lenia (potrójny blank) oznacza, Ŝe w tym miejscu moŜe być zero lub więcej argumentów
(wygodny sposób wprowadzania opcji)
plotAsymptoticBesselI@n_, xmin_, xmax_, opts___D :=
è!!!!!!!!!!!!
PlotAEvaluateA 2 π x Exp@−xD BesselI@n, xDE, 8x, xmin, xmax<, optsE
plotAsymptoticBesselI@2, 0, 50D;
tableAsymptoticBesselI = Table@
plotAsymptoticBesselI@n, 0, 50, DisplayFunction → IdentityD, 8n, 0, 5<D;
Show@tableAsymptoticBesselI, DisplayFunction → $DisplayFunctionD;
Rysowanie punktów
Krzywa teoretyczna
In[30]:=
HΓ ê 2L2
bw@x_, x0_, Γ_D := Hx − x0L2 + HΓ ê 2L2
Symulowane dane eksperymentalne
In[31]:=
1
bwData2 = TableA9x, bwAx, 1, E H0.8 + 0.4 Random@DL=, 8x, 0, 3, 0.1<E;
2
Opcje dla ListPlot s± takie same jak dla Plot.
In[32]:=
plot2@bwData2D = ListPlot@bwData2, PlotStyle → AbsolutePointSize@4DD;
Wy¶wietlenie razem krzywej teoretycznej i danych
In[33]:=
1
plot@bwCurveD = PlotAbwAx, 1, E, 8x, 0, 3<, DisplayFunction → IdentityE;
2
7
LAB04.NB
In[34]:=
Show@8plot2@bwData2D, plot@bwCurveD<, DisplayFunction → $DisplayFunctionD;
Przykład uŜycia funkcji z dodatkowego pakietu
Przeczytać w helpiePolarPlot i ...
Przy pomocy PolarPlot narysować krzywe:
a) r = cos2 q - sin2 q;
b) r = 1 + sinq;
c) r = ÅÅÅÅ12 + cosq,
a następnie umie¶cić je na jednym rysunku.
Uwaga: jeŜeli dokonali¶my inicjalizacji w sposób opisany na pocz±tku nie potrzebujemy jawnie wczytywać pakietu
Funkcje dwóch zmiennych
à Plot3D
Plot3D[f,{x,xmin,xmax},{y,ymin,ymax}].
Uwaga: Standardowe 15 punktów w PlotPoints często nie jest wystarczaj±ce
Plot3D@Evaluate@Re@SphericalHarmonicY@3, 1, θ, φDDD, 8θ, 0, π<, 8φ, 0, 2 π<,
PlotPoints → 50, PlotRange → 8−1, 1<, AxesLabel → 8"θ", "φ", "Re@Yλm D"<D;
Dodatkow± opcj± w stosunku do Plot jest ViewPoint. Wygodnie moŜna zadać jej warto¶ć z menu Input ( 3D ViewPoint Selector)
Plot3D@Evaluate@Re@Gamma@x + I yDDD, 8x, −5, 5<, 8y, −5, 5<,
PlotPoints → 50, ViewPoint −> 8−5.009, −6.671, 1.524<D;
8
LAB04.NB
Wykresy dane parametrycznie
à Krzywe płaskie zadane parametrycznie
ParametricPlot[{x[t],y[t]},{t,tmin,tmax}] z typowymi opcjami.
In[35]:=
lissajous@n_, φ_D := 8Cos@tD, Sin@n t + φD<
In[36]:=
plotLissajous@n_, φ_, opts___D :=
ParametricPlot@Evaluate@lissajous@n, φDD, 8t, 0, 2 π<, optsD
In[37]:=
lissajousTable = TableAplotLissajous@n, φ, AspectRatio → 1, Axes → False,
π
DisplayFunction → IdentityD, 8n, 1, 4<, 9φ, 0, π, =E;
4
Show@GraphicsArray@lissajousTableDD;
Narysować
x = r H1 - sinHtLL
y = r H1 - cosHtLL
dla {t,-2p,2p}.
à Krzywa w przestrzeni
ParametricPlot3D[{x[t],y[t],z[t]}, {t,tmin,tmax}].
path = 8Cos@5 tD, Sin@5 tD, t<;
ParametricPlot3D@Evaluate@pathD, 8t, 0, 10<,
Boxed → False, Axes → False, AspectRatio → AutomaticD;
Inne wizualizacje w 3D
DensityPlot[f[x,y], {x,xmin,xmax},{y,ymin,ymax}]
ContourPlot[f[x,y], {x,xmin,xmax},{y,ymin,ymax}]
DensityPlot@Exp@−Hx2 + y2 L ê 20D Cos@x yD, 8x, −4, 4<,
8y, −4, 4<, PlotPoints → 100, ColorFunction → HueD;
ContourPlot@Exp@−Hx2 + y2 L ê 20D Cos@x yD, 8x, −4, 4<,
8y, −4, 4<, Contours → 25, PlotPoints → 100, ColorFunction → HueD;
9
LAB04.NB
Opis rysunku - legenda
à Pakiet Legend (raczej ciekawostka)
labelJ = StyleForm@"J2 ", FontFamily → "Helvetica",
FontColor → RGBColor@1, 0, 0D, FontSize → 12D;
labelY = StyleForm@"Y2 ", FontFamily → "Helvetica",
FontColor → RGBColor@0, 1, 0D, FontSize → 12D;
labelLegend = StyleForm@"Bessel
functions", FontFamily → "Helvetica",
FontColor → RGBColor@0, 1, 0D, FontSize → 12D;
Plot@Evaluate@8BesselJ@2, xD, BesselY@2, xD<D, 8x, 0, 20<, PlotStyle →
88RGBColor@1, 0, 0D<, [email protected], 0.02<D, RGBColor@0, 1, 0D<<,
PlotLegend → 8labelJ, labelY<, LegendPosition → 81, 0<,
LegendSize → 81., 0.5<, LegendLabel → labelLegendD;
Grafika2D - podstawowe cegiełki (atomy, dyrektywy i opcje)
Graphics[atomy, opcje] reprezentuje dwuwymiarową grafikę.
† Obiekt opisany przez Graphics jest wyświetlany przy pomocy polecenia Show.
† Mamy do dyspozycji następujące atomy (podstawowe elementy) graficzne:
Circle@ 8x, y< , rD
Disk@ 8x, y< , rD
Line@ 88x1 , y1 < , Ω < D
Point@ 8x, y< D
Polygon@ 88x1 , y1 < , Ω < D
PostScript@"string"D
Raster@arrayD
RasterArray@garrayD
Rectangle@ 8xmin, ymin< , 8xmax, ymax< D
Text@expr, 8x, y< D
okrąg
wypełnione koło
odcinek
punkt
wypełniony wielobok
kod PostScriptu bezpośrednio dołączany
tablica poziomów szarości
tablica kolorowych komórek
Wypełniony prostokąt
tekst
10
LAB04.NB
Dyrektywy
AbsoluteDashing[
AbsolutePointSize[
AbsoluteThickness[
CMYKColor[
Dashing[
GrayLevel[
Hue[
PointSize[
RGBColor[
Thickness[
specfikacja linii kreskowanej ((absolutna,
drukarskich\ - 1/72 cala)
absolutna specyfikacja wymiaru punktu
absolutna specyfikacja grubości linii
specyfikacja koloru (typ CMYK)
specyfikacja linii kreskowanej (wzgledna,
procent szerokości rysunku)
specyfikacja intensywności szarości (od 0
specyfikacja koloru
wzgldny rozmiar punktu
specyfikacja koloru (typ RGB)
wzgledna gruboś\[CAcute] linii
Opcje
AspectRatio
Axes
AxesLabel
AxesOrigin
AxesStyle
Backround
ColorOutput
DefaultColor
DisplayFunction
Epilog
1/GoldenRatio
False
None
Automatic
Automatic
Automatic
Automatic
Automatic
$DisplayFunction
{}
FormatType
Frame
FrameLabel
FrameStyle
FrameTicks
GridLines
ImageSize
$FormatType
False
None
Automatic
Automatic
None
Automatic
PlotLabel
PlotRange
PlotRegion
Prolog
RotateLabel
TextStyle
Ticks
None
Automatic
Automatic
8<
True
$TextStyle
Automatic
stosunek wysoko\.9cci do szereko\.9cci
czy rysowa\[CAcute] osie
etykiety osi
pocz\[SHacek]tek uk\[LSlash]adu
dyrektywa graficzna specyfikuj\[SHacek]
kolor\ t\[LSlash]a
typ kodowania koloru
domy\.9clny kolor element\[OAcute]w
funkcja generuj\[SHacek]ca output
atomy graficzne wy\.9cwietlane po
g\[LSlash]\[OAcute]wnym rysunku
domy\.9clny format dla tekstu
czy ma by\[CAcute] ramka doko\[LSlash]a
etykiety ramki
dyrektywy graficzne nadaj\[SHacek]ce
znaczniki na ramce
linie siatki
absolutny rozmiar rysunku
etykieta rysunku
zakres uwzględnianych wartości
finalny obszar rysunku
podobnie jak epilog Htylko przedL
czy obracać y etykietę na ramce
domyślny styl dla tekstu
znaczniki
11
LAB04.NB
† Listy atomów graficznych moŜna zagnieŜdŜać.Dyrektywy takie jak GrayLevel pozostają w mocy aŜ do końca listy,
które je zawiera.
† Graphics@Graphics3D@ Ω DD generuje obiekt typu Graphics odpowiadający podanej grafice
3 D Hto samo pracuje dla SurfaceGraphics, ContourGraphics i DensityGraphicsL.
Przykład 1
In[1]:=
wierzchołki = 880, −1<, 81, 0<, 80, 1<, 8−1, 0<, 80, −1<<;
In[2]:=
p = Graphics@8RGBColor@1, 0, 0D, Polygon@wierzchołkiD<D;
In[3]:=
l = Graphics@[email protected], RGBColor@0, 0, 1D, Line@wierzchołkiD<D;
In[7]:=
Show@p, lD;
In[6]:=
Show@p, l, Frame −> TrueD;
Clear@wierzchołki, p, lD
Przykład 2
In[22]:=
Show@Graphics@8Text@"r", 81.6, −0.2<D, Text@"θ", 80.8, 0.35<D,
[email protected], Circle@80, 0<, 3D, [email protected],
Line@883, 0<, 80, 0<, 83 Cos@π ê 4D, 3 Sin@π ê 4D<<D,
[email protected], [email protected]<D,
Circle@80, 0<, 1.25, 80, π ê 4<D<D, AspectRatio → AutomaticD;
Przykład 3
In[21]:=
ShowAGraphicsA
[email protected], Polygon@880, 0<, 81, 1<, 80, 2<, 8−1, 1<, 80, 0<<D<,
8Hue@0D, [email protected],
Line@880, 0<, 81, 1<, 80, 2<, 8−1, 1<, 80, 0<<D<, Line@880, 0<, 80, 2<<D,
è!!!!
[email protected]<D, Circle@80, 0<, 1D, CircleA80, 0<, 2 E,
Line@88−2, −2<, 82, 2<<D, Line@88−2, 2<, 82, −2<<D,
Line@88−2, 0<, 82, 4<<D, Line@88−2, 4<, 82, 0<<D=,
[email protected], Line@880, 0<, 81, 0<, 81, 1<, 80, 1<, 80, 0<<D<=E,
Axes → True, AxesOrigin → 80, 0<, AspectRatio → Automatic,
PlotRange → 8Automatic, 8−0.2, 2.2<<,
PlotLabel → "podwajanie kwadratu"E;
Ćwiczenie
PoniŜszy kod produkuje rysunek twarzy. UŜyj rozmaitych komend, dyrektyw i opcji, aby dodać dodatkowe elementy
(nos, broda, kapelusz,itp.) lub zmienić wygląd istniejących (np. kolor oczu).
In[23]:=
Show@Graphics@[email protected], Circle@80, 0<, 1D,
[email protected], Point@8−0.5, 0.3<D, [email protected], 0.3<D,
Circle@80, −0.1<, 0.5, 85 π ê 4, 7 π ê 4<D<D, AspectRatio → AutomaticD;
12
LAB04.NB
Jeden z moŜliwych wariantów:
In[24]:=
Show@Graphics@[email protected], Circle@80, 0<, 1D, [email protected],
Blue, Circle@8−0.5, 0.3<, 0.04D, [email protected], 0.3<, 0.04D,
Red, Circle@80, −0.1<, 0.5, 85 π ê 4, 7 π ê 4<D, Pink,
Polygon@88−0.25, −0.9<, 80.25, −0.9<, 80, −1.25<<D, Green,
Polygon@88−0.6, 0.9<, 80.6, 0.9<, 80.6, 1.1<, 8−0.6, 1.1<<D,
Polygon@88−0.4, 1.1<, 80.4, 1.1<, 80.4, 1.5<, 8−0.4, 1.5<<D<D,
AspectRatio → AutomaticD;

Podobne dokumenty