π₯ Whatβs New
- WebGL Hardware Acceleration β Smoother GraphicsComplex rendering for DensityPlot, ContourPlot, and more.
- Experimental Texture Support β 2D GraphicsComplex now supports Texture mapping.
- Placed with Legended β Fully supported for more flexible legend positioning.
- TeXForm Returns β Convert, import, and render TeX in markdown cells.
- GeoGraphics Raster Support β Improved rendering with full rasterization.
- ImageUpscaling Option β Better quality when using Rasterize (Desktop App only).
- WLJS Interpreter Enhancements β Improved support for dynamic/numeric arrays and Offload.
- Improved HTML Export β Manipulate now works offline with better memory management.
- Organized Examples & Guides β Revamped structure for easier learning (more content coming).
βΈ»
const balloonContainer = document.getElementById("balloon-container"); function random(num) { return Math.floor(Math.random() * num); } function getRandomStyles() { var r = random(255); var g = random(255); var b = random(255); var mt = random(200); var ml = random(50); var dur = random(5) + 5; return ` background-color: rgba(${r},${g},${b},0.7); color: rgba(${r},${g},${b},0.7); box-shadow: inset -7px -3px 10px rgba(${r - 10},${g - 10},${b - 10},0.7); margin: ${mt}px 0 0 ${ml}px; animation: float ${dur}s ease-in infinite `; } function createBalloons(num) { for (var i = num; i > 0; i--) { var balloon = document.createElement("div"); balloon.className = "balloon"; balloon.style.cssText = getRandomStyles(); balloonContainer.append(balloon); } } function removeBalloons() { balloonContainer.style.opacity = 0; setTimeout(() => { balloonContainer.remove() }, 500) } createBalloons(10); setTimeout(removeBalloons, 15000); return '';
UI Update: resizable sidebar!β
Just drag ;)
Hardware acceleration of GraphicsComplexβ
2D version of GraphicsComplex
featured in DensityPlot
and many others was reimplemented in WebGL. We combine SVG and raster graphics to get the best of both worlds
ContourPlot[Cos[x] + Cos[y], {x, 0, 4 Pi}, {y, 0, 4 Pi}, PlotLegends->Automatic]
(*VB[*)(Legended[ToExpression[FrontEndRef["9f76f44f-5efb-451f-87ff-5eaf780d3f86"], InputForm], Placed[BarLegend[{Blend["WL13DefaultDensityGradient", #1] & , {-2., 2.}}, {{-1.5, Directive[GrayLevel[0], Opacity[0.5], CapForm["Butt"]]}, {-1., Directive[GrayLevel[0], Opacity[0.5], CapForm["Butt"]]}, {-0.5, Directive[GrayLevel[0], Opacity[0.5], CapForm["Butt"]]}, {0., Directive[GrayLevel[0], Opacity[0.5], CapForm["Butt"]]}, {0.5, Directive[GrayLevel[0], Opacity[0.5], CapForm["Butt"]]}, {1., Directive[GrayLevel[0], Opacity[0.5], CapForm["Butt"]]}, {1.5, Directive[GrayLevel[0], Opacity[0.5], CapForm["Butt"]]}, {2., Directive[GrayLevel[0], Opacity[0.5], CapForm["Butt"]]}}, LabelStyle -> {}, LegendLayout -> "Column", LegendMarkerSize -> 225, ScalingFunctions -> {Identity, Identity}, Charting`AxisLabel -> None, Charting`TickSide -> Right, ColorFunctionScaling -> True], After, Identity]])(*,*)(*"1:eJzFVE1P3DAQTaF8VVSCilNvSFxXgrKwy4nCfqBK4UNrVK71xuPFwtjIcSjpnys/Bf4BR46diXeXTcS5yWHkGb+Z9yZR3ubQDuR8FEXpZww/FfzuQmId99axJazEMAIjvsk5gnzC0BMK7wgoP1DtC4a+s8b3jOg9QJJ5PtTAtrB8IFv7stmUjT2Qw0Zzb0c22i1JKZet9rbYle39MPgjhkGGbct0AC7Ojc6L6qXLIOhbxHCheQJCrlBO4Zi7IPBtTKxSH5TRrH5mEq+sCfcL1KIRzr7i6Sre2e2C5Jn2XTCp8vmJ40KBGffTNKatV5SVCVwUnsfJ4btcLgl4D/36NyxCwrvKAQq7h0BFJSTPY7gHrQgc6vQFzu94gtrGQ54O3246/K5v3S0jnuPMv8/6UgvrUy2sOKqOXQ9r+a61sL7Wwoq/1/9iJRcqfC7mQ9DM5xpkNCupAl2NJh4Z89xmnpFNdazObk0FuTZFnnJ3A46pP6Ceo1lrmeJYwrUyo4l7peW3UjjbD4FGhduVksoo8ubONXceZ/06elBpsVRxf2YNVNDrs+hLldwwJaDwzIEaXVcX3wh7WjcROdY8de2i80h6cCWJ/wDjPW1m"*)(*]VB*)
It not only looks smoother (before we only had flat-shading), but also has less impact on the notebook performances
DensityPlot[Cos[x] Sin[y], {x, -4Pi, 4Pi}, {y, -4Pi, 4Pi}, ColorFunction -> ColorData["Rainbow"]]
(*VB[*)(FrontEndRef["e4f9c851-e183-4a43-9841-1de4cbbd2804"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKp5qkWSZbmBrqphpaGOuaJJoY61pamBjqGqakmiQnJaUYWRiYAACBXhV2"*)(*]VB*)
Texture supportβ
This feature is still experimental and might not work in all cases. Now we do support Texture
mapping in 2D GraphicsComplex
, which make possible to do complex plots
ComplexPlot[(*FB[*)(((*SpB[*)Power[z(*|*),(*|*)2](*]SpB*) + 1)(*,*)/(*,*)((*SpB[*)Power[z(*|*),(*|*)2](*]SpB*) - 1))(*]FB*), {z, -2 - 2 I, 2 + 2 I}, PlotLegends -> Automatic]
(*VB[*)(Legended[ToExpression[FrontEndRef["23eac45f-ae38-4196-b1c3-70a5a35a6e42"], InputForm], Placed[BarLegend[{ColorDataFunction["MidShiftBalancedHue", "ThemeGradients", {0, 1}, Blend["MidShiftBalancedHue", #1] & ][#1] & , {0, 1}}, LabelStyle -> {}, LegendLayout -> "Column", LegendMarkerSize -> 225, "ColorFunctionShading" -> None, OpacityFunction -> (1 - Rescale[#1, {0, 0.9}, {0, 1}] & ), "OpacityFunctionTicks" -> {{0, "0"}, {0.9, 4}, {1, "Infinity"}}, "OpacityFunctionSize" -> Scaled[0.5], "OpacityFunctionRange" -> {0, 1}, Charting`TickLabels -> {"-\[Pi]", "-\[Pi]/2", "0", "\[Pi]/2", "\[Pi]"}, Ticks -> {{0., 0.25, 0.5, 0.75, 1.}, {{0, 1/20, 1/10, 3/20, 1/5}, {1/5, 1/4, 3/10, 7/20, 2/5}, {2/5, 9/20, 1/2, 11/20, 3/5}, {3/5, 13/20, 7/10, 3/4, 4/5}, {4/5, 17/20, 9/10, 19/20, 1}}}, Charting`TickSide -> Right, ColorFunctionScaling -> True], After, Identity]])(*,*)(*"1:eJyNVctu00AUNYmbkEKhJf0BJLYReRboJqJpCkgpRZmIVRfc2NfJqM64Go8F4RtB4hNgx4IFfwDzSNzYTpzMYjy+z3PPncfTcTD0ipZlhQdy+kjx8zk6AQcRcFKWkgFOkLlNr6BM9uXUd6nUKUPvnpI9kdMFD5joM7f/BZ1IwNhH8kyKmy0Ep93xaoCtl7V249VJbdxwWrUXdehAqwMn2F4EtuU0jKTbfbVAcK+YP9fSEY/Q4CvJ6YMPDrqeghpW5HQG3AC8CzOgoTDIVKyLiDmCBkxLPKUPj+TUC/yAn4OApZ5UpfSSumRKPXEGPjCZ522E5JHCMMUZvuHgUmQiTKai8mtRHT2bVFvuKZy+xLgph3FUAYkfiJVYSdGmtAkCdYsGMEafiLmPnpWgJWn6MG7vAOZBJEjJMBPNWMryMLa8BH6DnNCvSH9lkpPjJbUxrVNJGptoi/cBw1Tcx3JxdQsOFfNEo9awaOvuR+FKzYrYEZ1hSP/JYTZJWe+f0AF/La1ZDvn3b2r86e7Gry4xBXlEnZvQpM8yHQcjKlg9qYiTUzuLTtnrllyfNpuNfgpHNYtDdcUUrbyI4sDllh4/u9vLGAKb4I67TGXvTYEL2dxPqn695UJvb9Vb3x+169N6q1cnlbv186bhQh/2WFSKf1K5TJsVxckznsi1qFP203x+dOPKF4vfy8XfbtI1+adLNpn0XQSKGvA1CfQ4R7e/Xlfc5qeypwDlWW7Q2TnZNyAr5yAr7IyskIOssq32wnrdgxy/4s7IijnIDnIylLd1cwPX9s7I7BxkRznIKjnIqku/dcdVP3mrx5VQ1xysIZ1M0+9C9haXV8nyFlfvsfZ87QnkGsM7Vz6L8iL5D4UQwsM="*)(*]VB*)
Or here is an explicit example
texture = Texture[(*VB[*)(FrontEndRef["d86b6f35-0f6f-4159-bf14-6627b1a35523"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKp1iYJZmlGZvqGqSZpemaGJpa6ialGZrompkZmScZJhqbmhoZAwCBcRUY"*)(*]VB*)]; ParametricPlot[{r Cos[\[Theta]], r Sin[\[Theta]]}, {r, 1, 2}, {\[Theta], 0, 2 Pi/3}, PlotRange -> All, Mesh -> 15, PlotStyle->texture]
(*VB[*)(FrontEndRef["5d4848ee-5af4-42ab-86d4-d673c2e6d349"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKm6aYWJhYpKbqmiammeiaGCUm6VqYpZjoppiZGycbpZqlGJtYAgCHmRW1"*)(*]VB*)
Placedβ
This key-symbol now will fully work with Legended
too
Plot[ {x,x^2}, {x,0,1}, PlotLegends->Placed[SwatchLegend[Automatic], {0.2,0.2}] ]
(*VB[*)(Legended[ToExpression[FrontEndRef["a8054f96-296b-4648-ab68-3a3726fb371c"], InputForm], Placed[SwatchLegend[{Directive[Opacity[1.], RGBColor[0.24, 0.6, 0.8], AbsoluteThickness[2]], Directive[Opacity[1.], RGBColor[0.95, 0.627, 0.1425], AbsoluteThickness[2]]}, {HoldForm[Placeholder[Style[1, Smaller]]], HoldForm[Placeholder[Style[2, Smaller]]]}, LegendMarkers -> Automatic, LabelStyle -> {}, LegendLayout -> "Column"], {0.2, 0.2}, Identity]])(*,*)(*"1:eJylUjtOw0AQNf9fkIADICHRRoI4mFBEFpAEkIz4GNGv7VmyYu2N1mvAB+AQ0NJxAmo6GgoaDgANQkJwA/YDQU6DBFM87b6deTM7M3MB28cDlmWlkxIOCZw2IGQcCcb9Ecl4cARJVMH9ymVcQjMi8k054j7FzUhocZaIZhI1zyDMBAoo+POSRrWFpSpeccqVFScoV51qrYwCp1a2kb1ccXBgLy+GRnhQwn4mw0bVAVC0k9Bcswc8A1PfsIRdikKI8JC6lyT4p0iEbVPjj5JHUmFixiQ0CIdQkBMw9apP7XRQSETOLW3vrnHWuTfW1hllnN/Mnr/u3dy73Nb25PLLC2UvrpGZlrAapIxmAg7aJDxOIE2JKuG/mbG2N5dffzxsB1PPLq+PP1516re/Zy52oO9bepPRqMV4bJiJ7z62JQ3cBKmO+iKnQLql+jGiVL7/Taa/V6YwZ71sZmzbiB8DT3XDVjPBYiRIz1bovfNQAFRrY6vwzaJrqSvsoZxlwldrIxubxUmxPV/zvHO7B/3JrQgSISf0CWE7y/I="*)(*]VB*)
Plot[ {x,x^2}, {x,0,1}, PlotLegends->Placed[SwatchLegend[Automatic], {Top, Right}] ]
(*VB[*)(Legended[ToExpression[FrontEndRef["79796bff-38a0-4528-849d-2e12e998753e"], InputForm], Placed[SwatchLegend[{Directive[Opacity[1.], RGBColor[0.24, 0.6, 0.8], AbsoluteThickness[2]], Directive[Opacity[1.], RGBColor[0.95, 0.627, 0.1425], AbsoluteThickness[2]]}, {HoldForm[Placeholder[Style[1, Smaller]]], HoldForm[Placeholder[Style[2, Smaller]]]}, LegendMarkers -> Automatic, LabelStyle -> {}, LegendLayout -> "Row"], {Top, Right}, Identity]])(*,*)(*"1:eJylUktOAkEQHfyLmKgHMDFxS6J8hFmQCQqoCQRliPuemRro0EyTnh6RA3gI3brzBKw9gAs3HkA3xsToDexPwAwbE63Fy8zrqldVr3vHoS1/3jCMcF3ABYZhBVzKEKfMXhZMHToQeBl/TqYkBVQ9LM5kop+Q3JaAGqMBrwZe9QrciCOHgL0r6IJZMA8c309ni2gvnctniulizvTSGdjPgGkWC/ksaOEFAa1IlK3ID0BeMyAjxbZZBHq+JQFnBLng+YvyPyXAHiLudvWMP0p1HHJdsyqgghm4HF+Cnlcu1RwgF/MRM1R8WjpZ9T4+PKKEMjbevn4/Hz9aLKvixWK3NzLeLC2zKaDshJREHNpd7PYCCEMsR/hvZ1/Fh8Xuv54azsarxUrJ57tB6eH3znEHEhPpE0q8GmV9zaxNfOwKGpguko7afEQAT0e1+4gQcf43mblZmdg9q8emr62BWA9YqAwrR5z2EcfuTLZ8d3XkAFHavhFbM56amgrX0YhG3JYGt+gw7k0o2TYdqIFbuNPlasNTDwIurucbOVLEog=="*)(*]VB*)
Plot[ {x,x^2}, {x,0,1}, PlotLegends->Placed[SwatchLegend[Automatic], After] ]
(*VB[*)(Legended[ToExpression[FrontEndRef["e7fbcf02-69f8-4ecf-8884-ac559efbef1d"], InputForm], Placed[SwatchLegend[{Directive[Opacity[1.], RGBColor[0.24, 0.6, 0.8], AbsoluteThickness[2]], Directive[Opacity[1.], RGBColor[0.95, 0.627, 0.1425], AbsoluteThickness[2]]}, {HoldForm[Placeholder[Style[1, Smaller]]], HoldForm[Placeholder[Style[2, Smaller]]]}, LegendMarkers -> Automatic, LabelStyle -> {}, LegendLayout -> "Column"], After, Identity]])(*,*)(*"1:eJylUktKA0EQHf9/UA8gCG4HNP7iIgzRJCokRB1x39NTbRo706Gnx5gDeAjduvMEWXsAF248gG5EEL2B1d0YiRtBa/GYqa569eqzGMkjNuR5XjqDcMKhXQIqFdFShWPoqcIpJHGODZqQSYRyzPHNBLIB45tHqCiZ6HISly+AZppEAsIldMMmiyhbzvkbWyzvrwFlfj6fX/MJXV/fAhYBW4kd8TDCUYZp4+YDSFxPRMd6j1UGTt8owoEgFGI2Yv6nEcI20bThNH4zVXmqXc4EQokroJqfg9Nrmqq3COW6ozxr74ELtrV3t3ekkEp1Fy5fD7v3gVq19hSo6ytjL4GjmUMoRqkUmYbjBqdnCaQpNxL+W5lZewvU7cdDLZp9DlRh8vGmVbj7vXL/BAa+qPekiCtSNZ1n6muODXSDcklmoqHuCOA9qWGTCIHvf6MZ/EnTt2d7bG5tNaLOQKV2YMVMyybRnP6INndXJREIy828vjb7Q6d7xFXSkZkOzdngYLNmYtUVmcZqpp39GBKNu/gEN8PDUA=="*)(*]VB*)
TeXForm is back!β
We dropped a long time ago this feature, but now it is back
TeXForm[Series[Sin[x], {x,0,4}]//Normal]
"x-\\frac{x^3}{6}"
Now import it back
ToExpression[%, TeXForm]
x-((*FB[*)((1)(*,*)/(*,*)(6))(*]FB*)) ((*SpB[*)Power[x(*|*),(*|*)3](*]SpB*))
Now use to draw TeX equations using inline markdown cells
CellView[StringJoin[ "$$\n", TeXForm[Series[Sin[x], {x,0,7}] // Normal], "\n$$" ], "Display"->"markdown"]
(*VB[*)(FrontEndRef["83721a5a-d923-485b-80e5-2ba472fe3dc0"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKWxibGxkmmibqplgaGeuaWJgm6VoYpJrqGiUlmpgbpaUapyQbAAB45xVt"*)(*]VB*)
GeoGraphicsβ
We added the full support of its rasterized version
Entity["Country", "Italy"]
(*VB[*)(Entity["Country", "Italy"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KWnMIB4vkAjLTC13SU3OL0osyS8KZgOKuOaVZJZUBrMDmc75pXklRZXBrEC2Z0liTiUAdDwSUA=="*)(*]VB*)
GeoGraphics[{EdgeForm[Black], FaceForm[Red], Polygon[Here]}]
(*VB[*)(FrontEndRef["40b9e75a-753d-4879-aa0d-da04817ceee1"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKmxgkWaaamybqmpsap+iaWJhb6iYmGqTopiQamFgYmienpqYaAgCB7BXV"*)(*]VB*)
ImageUpscaling optionβ
Rasterize
is available only for WLJS Desktop App
When rasterizing images you can upscale the canvas by an integer factor
Plot[x, {x,0,1}]; Rasterize[%, "ImageUpscaling"->2]
(*VB[*)(FrontEndRef["cc9063ec-cdd2-4809-8a3e-8c29779e2d47"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKJydbGpgZpybrJqekGOmaWBhY6lokGqfqWiQbWZqbW6YapZiYAwCMMRW5"*)(*]VB*)
This comes handy for exporting hi-rez figures.
Misc static graphicsβ
Some of gauges now can be used as static graphics
ClockGauge[{14, 42, 56}]
(*VB[*)(FrontEndRef["a82c9249-2e4a-43bc-b9c9-2cdd5b1781b7"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKJ1oYJVsamVjqGqWaJOqaGCcl6yZZJgO5ySkppkmG5haGSeYAhnUV1g=="*)(*]VB*)
ThermometerGauge[25, {0, 100}]
(*VB[*)(FrontEndRef["e11ffba1-7ce9-49b2-a9f5-e6cff727e334"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKpxoapqUlJRrqmienWuqaWCYZ6SZappnqppolp6WZG5mnGhubAACVcRZB"*)(*]VB*)
WordCloud can also be used in the same way
trigrams = Tally@*Flatten@* Map[ToLowerCase/*Characters/*(Partition[#, 3, 1] &)/* Map[StringJoin]]@ StringSplit[ExampleData[{"Text", "AeneidEnglish"}], Except[LetterCharacter] ..]; WordCloud[Take[SortBy[trigrams, Last], -50], ColorFunction -> (Blend[{GrayLevel[0.5], GrayLevel[0]}, #1] &)]
(*VB[*)(FrontEndRef["877cbb1e-7dc0-4fc2-9f7f-c9f139978ee0"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKW5ibJyclGabqmqckG+iapCUb6VqmmafpJlumGRpbWppbpKYaAACQMhYg"*)(*]VB*)
WLJS Interpreterβ
We improved dynamics in our wljs-interpreter (quazi Wolfram Language interpreter running on Javascript engine).
Before depending if you were passing packaged/numerical array to some Offload
expression it could throw an exception since nested symbols like List
did not work well with numerical arrays. However, now it is safe to use such expressions
axes = RandomReal[3, {3,3}]; (*BB[*)(*ensures it is a packed array *)(*,*)(*"1:eJxTTMoPSmNhYGAo5gcSAUX5ZZkpqSn+BSWZ+XnFaYwgCS4g4Zyfm5uaV+KUXxEMUqxsbm6exgSSBPGCSnNSg9mAjOCSosy8dLBYSFFpKpoKkDkeqYkpEFXBILO1sCgJSczMQVYCAOFrJEU="*)(*]BB*)
Graphics3D[{ Red, Tube[{{0.,0.,0.}, axes[[1]]} // Offload, {0.1, 0.01}], Green, Tube[{{0.,0.,0.}, axes[[2]]} // Offload, {0.1, 0.01}], Blue, Tube[{{0.,0.,0.}, axes[[3]]} // Offload, {0.1, 0.01}] }]
(*VB[*)(Graphics3D[{RGBColor[1, 0, 0], Tube[Offload[{{0., 0., 0.}, axes[[1]]}], {0.1, 0.01}], RGBColor[0, 1, 0], Tube[Offload[{{0., 0., 0.}, axes[[2]]}], {0.1, 0.01}], RGBColor[0, 0, 1], Tube[Offload[{{0., 0., 0.}, axes[[3]]}], {0.1, 0.01}]}])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRAeF5BwL0osyMhMLjZ2SWODqfDJLC5JYwbxOIBEkLuTc35OflEmSE8mA4xIY4IpDylNSoUYyA4k/NPScvITUxDSCNNgvCIGKMBkILQFJBaVgBmJFanFYLtRjSyaNRMEdtoXVYusc39Y1WKPxclg18LdTV8nM1HgZLi76etkZiKcDADSfHB2"*)(*]VB*)
Here it is used as a mixure of dynamic symbol axes
(which is a numeric array due to Wolfram Engine optimizations) and external List
.
Try to update, it should work
axes = Map[(# + 0.1 Cross[{1.,1.,1.}, #])&, axes];
Operations such as Plus
, Times
shall work like normal as well.
Better export to interactive HTMLβ
We managed to make Manipulate
work offline! Before it was only possible for custom dynamics or ManipulatePlot
to function properly, since it does not involve dynamic frontend object creation. Now we turn off garbage collector before processing the notebook, let it accumulate objects and turn it back on after the exporting process has been finished.
The good news, you don't need to think about it. See it in action
Manipulate[ Row[{ "m", "==", MatrixForm[m], StreamPlot[Evaluate[m . {x, y}], {x, -1, 1}, {y, -1, 1}, StreamScale -> Large, ImageSize -> Small ] }], {{m, ((*GB[*){{1(*|*),(*|*)0}(*||*),(*||*){0(*|*),(*|*)2}}(*]GB*))}, { ((*GB[*){{1(*|*),(*|*)0}(*||*),(*||*){0(*|*),(*|*)2}}(*]GB*)) -> "Nodal source", ((*GB[*){{1(*|*),(*|*)1}(*||*),(*||*){0(*|*),(*|*)1}}(*]GB*)) -> "Degenerate source", ((*GB[*){{0(*|*),(*|*)1}(*||*),(*||*){-1(*|*),(*|*)1}}(*]GB*)) -> "Spiral source", ((*GB[*){{-1(*|*),(*|*)0}(*||*),(*||*){0(*|*),(*|*)-2}}(*]GB*)) -> "Nodal sink", ((*GB[*){{-1(*|*),(*|*)1}(*||*),(*||*){0(*|*),(*|*)-1}}(*]GB*)) -> "Degenerate sink", ((*GB[*){{0(*|*),(*|*)1}(*||*),(*||*){-1(*|*),(*|*)-1}}(*]GB*)) -> "Spiral sink", ((*GB[*){{0(*|*),(*|*)1}(*||*),(*||*){-1(*|*),(*|*)0}}(*]GB*)) -> "Center", ((*GB[*){{1(*|*),(*|*)0}(*||*),(*||*){0(*|*),(*|*)-2}}(*]GB*)) -> "Saddle"}}]
(*GB[*){{(*VB[*)(EventObject[<|"Id" -> "509758da-8e51-4178-a5af-e81893425030", "Initial" -> {{{1, 0}, {0, 2}}}, "View" -> "8d3d8778-6b99-41b3-9af7-6c93fbbecfb8"|>])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKW6QYp1iYm1vomiVZWuqaGCYZ61omppnrmiVbGqclJaUmpyVZAACCUhYm"*)(*]VB*)}(*||*),(*||*){(*VB[*)(FrontEndRef["7220da85-6156-4421-8fdc-b4d0178f7d66"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKmxsZGaQkWpjqmhmamumamBgZ6lqkpSTrJpmkGBiaW6SZp5iZAQB03RUZ"*)(*]VB*)}}(*]GB*)
Better structured examplesβ
We sorted out all examples and guides we had. Some sections are sill populating with the content.
We need your help
Preview
-
Introduction to WLJS - a brief overview of notebook interface and WL
-
Data Visualization - showcases of the most essential plotting functions and charts in 2D and 3D, including path-tracing and PBR materials.
-
For Data Scientists
-
For Julia Users
-
For Jupyter Users
-
For MATLAB Users
-
For Python Users
-
For Mathematica Users
-
For Machine Learning (ML)
-
For Physicists
-
Numerical Data Handling
-
Differential Calculus
-
Media Formats
-
Geographical Data
-
Symbolic Programming
-
Animation
-
Dynamics and Interactivity
-
GUI Building Blocks
-
OpenCL
-
Slides and Presentations
-
Advanced Syntax Sugar
-
JavaScript Bindings
-
Mixing Languages
-
Frontend Interpreter
-
Notebook Utilities
-
Standalone Widgets
-
Experimental
-
Release Notes
Ballon animation by Jemima (codepen)