TOC notebooku

Archimédova spirála

Manipulace s daty v tabulce na několik způsobů

Kreslíme různě velké puntíky

Jak na 3 D transformace

Shodné natočení dvou grafů

Graf s legendou ColorFunction

Ořezání z souřadnice, pokud je z < 0

Dynamické přizpůsobení velikosti popisků velikosti grafu

Vytvoření uživatelské paletky

Exclusions - místa na grafu, kde není definovaná hodnota

Obrázek předem definované velikosti v PDFku

Přidání cesty do Trusted Paths

Vytřídění hodnot splňující určité podmínky

Podmíněné zobrazení ovladačů v Manipulate

Dynamic namísto Manipulate

Nabarvení vektorů ve FieldPlotu

TOCForNotebook[]

TOC notebooku

Clear[TOCForNotebook];
TOCForNotebook[]:=Module[{nbr,data,cells,nb},nb=EvaluationNotebook[];
SetOptions[nb,System`CreateCellID->True];
SelectionMove[nb,All,Notebook,AutoScroll->False];
NotebookWrite[nb,NotebookRead[nb]];
NotebookFind[nb,"Section",All,CellStyle];
nbr=NotebookRead[nb];
data=nbr/.{Cell[x_,"Section",___,z:(CellID->w_),___]:>{x,w}};
cells=TextCell[Button[TextCell[#[[1]],"Hyperlink"],NotebookFind[EvaluationNotebook[],#[[2]],All,CellID],Appearance->"Frameless"],"Text"]&/@data;
cells=First[ToBoxes[#]]&/@cells;
SelectionMove[EvaluationNotebook[],Before,Notebook,AutoScroll->True];
NotebookWrite[nb,cells];]

Archimédova spirála

archimedesspiral[n_,a_][t_]:=a t^(1/n) {Cos[t],Sin[t]}

With[{n=1,a=1},ParametricPlot[archimedesspiral[n,a][t],{t,0,12 π},Frame->True,Axes->False,PlotLabel->"Archimedes Spiral",Epilog->{Text[HoldForm["a"==a],Scaled[{.80,.95}],{-1,0}],Text[HoldForm["n"==n],Scaled[{.80,.9}],{-1,0}]},BaseStyle->{FontSize->12}]]

Manipulace s daty v tabulce na několik způsobů

(*512 řádků po 512ti trojicích čísel, chceme všechny trojice, jejichž libovolná hodnota je mimo interval <0, 1> vynulovat*)
test=Table[RandomReal[{-0.1,1.25}],{512},{512},{3}];

(*Metoda 1, procedurální programování*)
data1=test;
imax=Length[data1];
jmax=Length[data1[[1]]];
t1=Timing[For[i=1,i≤imax,i++,For[j=1,j≤jmax,j++,If[((data1[[i,j,1]]<0)||(data1[[i,j,1]]>1)||(data1[[i,j,2]]<0)||(data1[[i,j,2]]>1)||(data1[[i,j,3]]<0)||(data1[[i,j,3]]>1)),data1[[i,j]]={0.,0.,0.}]]]][[1]];

(*Metoda 2, funkcionální programování*) 
data2=test;
t2=Timing[data2=Map[If[#[[1]]<0||#[[1]]>1||#[[2]]<0||#[[2]]>1||#[[3]]<0||#[[3]]>1,{0.,0.,0.},#]&,data2,{2}];][[1]];

(*Metoda 3, funkcionální, využití fcí Min a Max*)
data3=test;
t3=Timing[data3=Map[If[Min[#]<0||Max[#]>1,{0.,0.,0.},#]&,data3,{2}];][[1]];
(*Metoda 4, víme, že větších čísel je více a OR je splněn, při prvním pravdivém výrazu*)
data4=test;
t4=Timing[data4=Map[If[Max[#]>1||Min[#]<0,{0.,0.,0.},#]&,data4,{2}];][[1]];

data5=test;
t5=
Timing[data5=With[{flat=Flatten[data5,1]},Partition[(1.-Unitize[Plus@@((1-UnitStep[#]+UnitStep[#-1])&/@Transpose[flat])])*flat,512]];][[1]];

(*A teď porovnání výsledků*)
data1==data2==data3==data4==data5
{t1,t2,t3,t4,t5}/t1
1/%
(*úplně jiná metoda*)

Kreslíme různě velké puntíky

data1=RandomReal[{0,15},{20,3}]
data2=RandomReal[{0.,15.},{20,3}]
data3=RandomReal[{0.,15.},{20,3}]

toDisk[{x_,y_,r_}]:=Disk[{x,y},0.02*r]

Graphics[{{RGBColor[1,0,0],toDisk/@data1},{RGBColor[0,1,0],toDisk/@data2},
{RGBColor[0,0,1],toDisk/@data3}},Frame->True]

Jak na 3 D transformace

Manipulate[
With[{
v=RotationTransform[Angle,{0,0,1}][{3,0,3}],
w=RotationTransform[Angle+0.1,{0,0,1}][{3,0,3}]},
Row[{Graphics3D[{Sphere[],Cuboid[]},
ViewPoint->v,SphericalRegion->True,ImageSize->200],
Graphics3D[{Sphere[],Cuboid[]},
ViewPoint->w,SphericalRegion->True,ImageSize->200]}]],
{Angle,0,2 Pi}]

Shodné natočení dvou grafů

Row[{Graphics3D[Cuboid[],ViewPoint->Dynamic[vp],ViewVertical->Dynamic[vv],SphericalRegion->True],Graphics3D[Cuboid[],ViewPoint->Dynamic[vp],ViewVertical->Dynamic[vv],SphericalRegion->True]}]

tutorial/AdvancedManipulateFunctionality

Graf s legendou ColorFunction

data=Table[{x=RandomReal[{0,Pi}],y=RandomReal[{0,Pi}],Sin[x*y]},{1000}];
GraphicsRow[{plt=ListPlot3D[data,ColorFunction->"TemperatureMap"],DensityPlot[y,{x,0,0.25},{y,-1,1},FrameTicks->{None,Automatic},AspectRatio->Automatic,ColorFunction->"TemperatureMap",PlotRangePadding->None]},Spacings->Scaled[-0.6]]

Ořezání z souřadnice, pokud je z < 0

Také lze pro tento účel využít funkci Clip

Nebo jiný způsob:
data /. {x_, y_, z_?Negative} -> {x, y, 0}
respektive obecněji
data /. {x_, y_, z_ /; z < threshold} -> {x, y, threshold}

With[{nn=4},data=Table[RandomReal[{-1,1}],{nn},{nn},{nn},{3}]]
orezano=Map[If[#[[3]]>0,#,{1,1,0}*#]&,data,{3}]

Dynamické přizpůsobení velikosti popisků velikosti grafu

Plot[BesselJ[0,x],{x,0,10},BaseStyle->{FontSize->Scaled[0.04]}]

Vytvoření uživatelské paletky

Now, RowBox is really low - level programming (by low - level I mean not friendly for end - users), so how can you know what is the correct Box structure for an expression?There is an easy way : in a Mathematica notebook write an expression, select its corresponding cell, and selecet in the Mathematica menu called "Cell"
the option "Show Expression", from there you can "steal" the box structure that you can use inside DisplayForm and inside PasteButton.Notice that, in this example, if you give a value to the variable a before creating the palette, then when you create the palette the button with a^2 will not show a^2, it will show the result of the calculation, while the button with RowBox will show (1 - a), exactly the same if "a" has or has not a value.

CreatePalette[{PasteButton[a^2],PasteButton[DisplayForm[RowBox[{"(",RowBox[{"1","-","a"}],")"}]]],PasteButton[(1-a)^2]

}];

Exclusions - místa na grafu, kde není definovaná hodnota

Plot[x/Log[x],{x,0,10},PlotRange->{-5,10},Exclusions->{x==1},ExclusionsStyle->Red]

Obrázek předem definované velikosti v PDFku

SetDirectory[NotebookDirectory[]]
gr=Plot[Sin[x],{x,0,10}]
cm=72/2.54;
Export["gr.pdf",Show[gr,ImageSize->8 cm]]

Přidání cesty do Trusted Paths

ClearAll[AddTrustedPath];

AddTrustedPath::nottrusted="The directory `1` is currently contained in the list of Untrusted \ directories.  Please remove it from this list first before adding it to the \ list of Trusted directories.";

AddTrustedPath[]:=Catch@Module[{securityOptions,dir,trustedPaths,unTrustedPaths,unTrustedPathsAsStrings,trustByDefault},trustedPaths=CurrentValue[$FrontEnd,{"NotebookSecurityOptions","TrustedPath"}];
unTrustedPaths=CurrentValue[$FrontEnd,{"NotebookSecurityOptions","UntrustedPath"}];
unTrustedPathsAsStrings=ToFileName[{#}]&/@unTrustedPaths;
trustByDefault=CurrentValue[$FrontEnd,{"NotebookSecurityOptions","TrustByDefault"}];
dir=SystemDialogInput["Directory",$HomeDirectory,WindowTitle->"Select a Directory to Trust"];
If[dir===$Canceled,Throw[$Canceled]];
If[MemberQ[unTrustedPathsAsStrings,dir],Throw[Message[AddTrustedPath::nottrusted,dir];
(SetOptions[$FrontEnd,"PreferencesSettings"->{"Page"->"System"}];
FrontEndTokenExecute["PreferencesDialog"])]];
trustedPaths=Union@Flatten[{trustedPaths,FrontEnd`FileName[{#}]&[dir]}];
securityOptions={"TrustedPath"->trustedPaths,"UntrustedPath"->unTrustedPaths,"TrustByDefault"->trustByDefault};
SetOptions[$FrontEnd,"NotebookSecurityOptions"->securityOptions];
securityOptions]

AddTrustedPath[]

Vytřídění hodnot splňující určité podmínky

mojeBody={{10,109},{15,87},{20,111},{25,69},{30,49},{35,107}};
Select[mojeBody,#[[2]]>=100&]

nebo

Cases[mojeBody,{x_,y_}/;y≥100]

Podmíněné zobrazení ovladačů v Manipulate

Manipulate[Graphics[{If[color,c,Black],Circle[{0,0},1]},ImageSize->{400,400}],{{color,True,"color on"},{True,False}},Item[PaneSelector[{True->Row[{"select color",PopupMenu[Dynamic@c,{Red->"red",Blue->"blue",Green->"green"}]},Spacer[3]],False->""},Dynamic@color]],{{c,Red},{Red,Blue,Green},ControlType->None},ControlPlacement->Left]

Dynamic namísto Manipulate

Dynamic@Row[{Graphics[If[colored,{color,Disk[]},Circle[]]],Checkbox[Dynamic[colored]],"Color",If[colored,PopupMenu[Dynamic[color],{Blue->"Blue",Green->"Green"}]]}," "]

Nabarvení vektorů ve FieldPlotu

Needs["VectorFieldPlots`"]
plt=ListVectorFieldPlot3D[Flatten[Table[{{i,j,k},{i,2 j,-k}},{i,0,1,0.1},{j,0,1,0.1},{k,0,1,0.1}],2],ScaleFactor->0.2]
Off[ArcTan::indet]
(plt/.Line[{p1_,p2_}]:>{Hue[ArcTan@@Take[p2-p1,2]/(2 Pi)],Line[{p1,p2}]})/.Hue[_Interval]:>Sequence[]