Skip to main content

Release notes *2.7.2*

Β· 5 min read

πŸ”₯ 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).

βΈ»

Download original notebook

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​

warning

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)