JMP has color themes for many purposes. Jet is one of the continuous Chromatic themes. It isn't the right choice for Height in the graph above because Jet is trying to use all the colors rather than trying to assign colors in a way that means short to tall (a scheme from the Sequential section might work better.) It looks pretty, but the smallest and largest values are quite dark.
You can find these themes in Prefs (ctrl-K) -> Graphs, click on the themes to change them.
I chose Jet for this video because it made a bright line in the center of the scale.
Zoomed 5X to see the sharp transition.
Here's the JSL. It is just using an average of 9 pixels to get the next color; the end result is to prefer straighter lines between regions.
nr = 1080 + 16; // the 16 border is trimmed when the video is made in blender
nc = 1920 + 16; // because the flicker from blue to red to blue is distracting
board = J( nr, nc, Random Uniform( -1, 1 ) ); // only the initial bitmap is random
ww = New Window( "view", img = New Image( Heat Color( (board + 1) / 2, <<"jet" ) ) );
// jet produces the colors from 0 to 1, our bitmap is -1 to 1
dir = "$desktop/heatpic/"; // keep pictures for blender to make into a video
ipic = 1000000; // the picture name is all numeric with a leading 1
For( i = 1, i < 100000, i += 1,
img << setpixels( Heat Color( (board + 1) / 2, <<"jet" ) );
Show( i, i / 100000 );
ww << inval << updatewindow;
Wait( .0 );
img << Save Image( dir || Char( ipic += 1 ) || ".jpg", "jpg" );
background = If( Sum( board ) > 0, -1, 1 ); // keep the red/blue ratio balanced with the border color
step = Ceiling( i / 10000 ) + 3; // speed up the animation towards the end
For( jstep = 1, jstep <= step, jstep += 1,
Parallel Assign(
{
p = .95, // slight extra push away from 0 -- .1^.95 -> .11
L = .999, // regions close to 1 or -1 flip
z = 2.35, // flip value; more than this is unstable
// add padding with background color
prev = J( nr + 2, 1, background ) || (J( 1, nc, background ) |/ board |/ J( 1, nc, background )) || J( nr + 2, 1, background )
},
board[r, c] = (
x = prev[r :: r + 2, c :: c + 2] ; // depends on padding
v = Sum( x ) / 9 ; // each pixel is the average of the 9 pixel square
If( // but...
v < -L, z, // full negative flips to positive
v < 0, -(-v) ^ p, // tweak the average with
v < L, v ^ p, // a push away from zero
-z // full positive flips to negative
)
)
)
);
);
I stopped the JSL loop after ~28K frames; it is long enough and the rate of change was too low to be interesting even with the step size increasing.
Last Modified: Sep 29, 2025 8:35 PM
Comments
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.