Plotki Wstęp Wybrane wbudowane funkcje graficzne: funkcja Plot@y, 8x, x min, x max <D wykres funkcji y@xd lub listy funkcji ListPlot@listD wykres listy punktów 8x, y< ParametricPlot@8x, y<, 8t, t min, t max <D wykres krzywej zadanej parametrycznie DensityPlot@f, 8x, x min, x max <, 8y, y min, y max <D wizulizacja f@x, yd typu "mapa" ContourPlot@f, 8x, x min, x max <, 8y, y min, y max <D poziomice f@x, yd Plot3D@z, 8x, x min, x max <, 8y, y min, y max <D wykres z@x, yd lub listy ParametricPlot3D@8x, y, z<, 8t, t min, t max <D krzywa lub powierzchnia parametrycznie ListPlot3D@listD 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 opis 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 Narysować x 3 ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ Exp@xD+1 dla dodatnich x. à 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@kxD, 8x, 1, 1<D ; H OK k nadano wcze niej warto ć L MoŜna rysować zdefiniowane funkcje f@x_d := xcos@πxd
LAB04.NB 3 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 == xsin@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@x 2 Sin@xDDLê2, 8x, 0, 100<D;
4 LAB04.NB "Odkrycie" okresowo ci Plot@H1 +Tanh@x 2 Sin@xDDLê2, 8x, 0, 100<, PlotPoints 100D; Aspect ratio PlotA9 è!!!!!!!!!!!!! 1 x 2, è!!!!!!!!!!!!! 1 x 2 =, 8x, 1, 1<E; PlotA9 è!!!!!!!!!!!!! 1 x 2, è!!!!!!!!!!!!! 1 x 2 =, 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]:= In[6]:= In[7]:= line@1d = 8Dashing@80.02, 0.02<D, RGBColor@1, 0, 0D, Thickness@0.01D<; line@2d = 8Dashing@80.02, 0.02<D, RGBColor@0, 1, 0D, Thickness@0.01D<; line@3d = 8Dashing@80.02, 0.02<D, RGBColor@0, 0, 1D, Thickness@0.01D<; lines = Table@line@nD, 8n, 3<D; 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.
LAB04.NB 5 $TextStyle = 8FontFamily "Courier", FontSize 16, FontSlant "Italic", FontWeight "Bold"<; plotgamma; $TextStyle = 8FontFamily "Times", FontSize 12<; à Odczytywanie współrzędnych z ryunku x è!!!!!!!!!!!!!!!! b 2 -x 2 Równanie przestępne ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ ã Cot@xD. Wobec kłopotów z rozwi±zaniem symbolicznym próbujemy rozwi±zać 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 x-1 D. Rozwi±zać w podobny sposób Sin@xD == Log@ ÅÅÅÅÅÅÅÅÅ 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]:= bw@x_, x0_, Γ_D := HΓê2L 2 Hx x0l 2 + HΓê2L 2 Symulowane dane eksperymentalne In[31]:= bwdata2 =TableA9x, bwax, 1, 1 E H0.8 +0.4Random@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]:= plot@bwcurved = PlotAbwAx, 1, 1 E, 8x, 0, 3<, DisplayFunction IdentityE; 2
LAB04.NB 7 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 = cos 2 q - sin 2 q; b) r = 1 + sinq; c) r = ÅÅÅÅ 1 2 + 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 View- Point 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, π, π 4 =E; Show@GraphicsArray@lissajousTableDD; Narysować x = rh1 - sinhtll y = rh1 - 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@ Hx 2 +y 2 Lê20D Cos@xyD, 8x, 4, 4<, 8y, 4, 4<, PlotPoints 100, ColorFunction HueD; ContourPlot@Exp@ Hx 2 +y 2 Lê20D Cos@xyD, 8x, 4, 4<, 8y, 4, 4<, Contours 25, PlotPoints 100, ColorFunction HueD;
LAB04.NB 9 Opis rysunku - legenda à Pakiet Legend (raczej ciekawostka) labelj = StyleForm@"J 2 ", FontFamily "Helvetica", FontColor RGBColor@1, 0, 0D, FontSize 12D; labely = StyleForm@"Y 2 ", 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<, 8Dashing@80.02, 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 okrąg Disk@ 8x, y<, rd wypełnione koło Line@ 88x 1, y 1 <, Ω< D odcinek Point@ 8x, y< D punkt Polygon@ 88x 1, y 1 <, Ω < D wypełniony wielobok PostScript@"string"D kod PostScriptu bezpośrednio dołączany Raster@arrayD tablica poziomów szarości RasterArray@garrayD tablica kolorowych komórek Rectangle@ 8xmin, ymin<, 8xmax, ymax< D Wypełniony prostokąt Text@expr, 8x, y< D tekst
10 LAB04.NB Dyrektywy AbsoluteDashing[ specfikacja linii kreskowanej ((absolutna, drukarskich\ - 1/72 cala) AbsolutePointSize[ absolutna specyfikacja wymiaru punktu AbsoluteThickness[ absolutna specyfikacja grubości linii CMYKColor[ specyfikacja koloru (typ CMYK) Dashing[ specyfikacja linii kreskowanej (wzgledna, procent szerokości rysunku) GrayLevel[ specyfikacja intensywności szarości (od 0 Hue[ specyfikacja koloru PointSize[ wzgldny rozmiar punktu RGBColor[ specyfikacja koloru (typ RGB) Thickness[ wzgledna gruboś\[cacute] linii Opcje AspectRatio 1/GoldenRatio stosunek wysoko\.9cci do szereko\.9cci Axes False czy rysowa\[cacute] osie AxesLabel None etykiety osi AxesOrigin Automatic pocz\[shacek]tek uk\[lslash]adu AxesStyle Automatic dyrektywa graficzna specyfikuj\[shacek] Backround Automatic kolor\ t\[lslash]a ColorOutput Automatic typ kodowania koloru DefaultColor Automatic domy\.9clny kolor element\[oacute]w DisplayFunction $DisplayFunction funkcja generuj\[shacek]ca output Epilog {} atomy graficzne wy\.9cwietlane po g\[lslash]\[oacute]wnym rysunku FormatType $FormatType domy\.9clny format dla tekstu Frame False czy ma by\[cacute] ramka doko\[lslash]a FrameLabel None etykiety ramki FrameStyle Automatic dyrektywy graficzne nadaj\[shacek]ce FrameTicks Automatic znaczniki na ramce GridLines None linie siatki ImageSize Automatic absolutny rozmiar rysunku PlotLabel None etykieta rysunku PlotRange Automatic zakres uwzględnianych wartości PlotRegion Automatic finalny obszar rysunku Prolog 8< podobnie jak epilog Htylko przedl RotateLabel True czy obracać y etykietę na ramce TextStyle $TextStyle domyślny styl dla tekstu Ticks Automatic znaczniki
LAB04.NB 11 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]:= In[2]:= In[3]:= In[7]:= In[6]:= wierzchołki = 880, 1<, 81, 0<, 80, 1<, 8 1, 0<, 80, 1<<; p = Graphics@8RGBColor@1, 0, 0D, Polygon@wierzchołkiD<D; l = Graphics@8Thickness@.02D, RGBColor@0, 0, 1D, Line@wierzchołkiD<D; Show@p, ld; 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, Thickness@0.015D, Circle@80, 0<, 3D, Thickness@0.01D, Line@883, 0<, 80, 0<, 83 Cos@πê4D, 3 Sin@πê4D<<D, Thickness@0.005D, Dashing@80.0075<D, Circle@80, 0<, 1.25, 80, π ê 4<D<D, AspectRatio AutomaticD; Przykład 3 In[21]:= ShowAGraphicsA 98GrayLevel@0.75D, Polygon@880, 0<, 81, 1<, 80, 2<, 8 1, 1<, 80, 0<<D<, 8Hue@0D, Thickness@0.01D, Line@880, 0<, 81, 1<, 80, 2<, 8 1, 1<, 80, 0<<D<, Line@880, 0<, 80, 2<<D, 9Dashing@80.01<D, Circle@80, 0<, 1D, CircleA80, 0<, è!!!! 2E, 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=, 8Thickness@0.01D, 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@8Thickness@0.03D, Circle@80, 0<, 1D, PointSize@0.04D, Point@8 0.5, 0.3<D, Point@80.5, 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@8Thickness@0.03D, Circle@80, 0<, 1D, Thickness@0.009D, Blue, Circle@8 0.5, 0.3<, 0.04D, Circle@80.5, 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;