<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Altro su JMP 13: Anteprima JMP 13 | JMP E Annuncio di JMP 13, in diretta dal Discovery Summit | JMP
giovanni.ponte aggiunte alcune funzionalità GIF animate a JMP 13 su Windows,
Salva un'animazione Bubble Plot come GIF animata
Salva un'animazione di filtro dati come GIF animata
Ecco un altro esempio.

Quasi tutti i browser con meno di 100 anni supportano le GIF animate.JMP 13 supporta la loro creazione.Il JSL allegato mostra un modo per catturare le bitmap dal frame di un grafico (senza assi, senza titolo) e memorizzarle nella GIF animata.
Ogni fotogramma dell'animazione può avere una propria durata; generalmente tutti i frame dovrebbero avere la stessa durata.È possibile specificare il numero di loop.Come puoi vedere, il loop per sempre diventa fastidioso.I loop possono essere riprodotti solo in una direzione.Se vedi una GIF che sembra invertire o rimbalzare, è perché l'unico loop direzionale ha frame che vanno avanti e indietro.Il ciclo sopra è per una singola onda sin (non i tre periodi che sembra essere).Anche così, è un file moderatamente grande: 19 frame in 130K byte.
Quanto segue dovrebbe essere lo stesso dell'allegato.Puoi vedere come il ciclo nell'ultimo 1/3 dello script sta cambiando i dati nella tabella dei dati per manipolare l'output del generatore di grafici, quindi scattare una foto.Il 1/3 centrale sta impostando il generatore di grafici e probabilmente non doveva essere così complicato poiché l'immagine è stata presa dall'interno del frame e ignora gli assi e le etichette.Il primo bit è un insieme di parametri con cui puoi giocare.L'ultima riga tenta di aprire il grafico.
// Questo script richiede Windows JMP 13, che può salvare file gif animati.
// Purtroppo la versione Mac di JMP non supporta ancora questa funzione GIF.
nBar = 50; // quante barre di animazione?
xsize=800; // dimensioni dell'immagine
ydimensione=100;
nFrame = 19; // quanti frame in loop
frameMS = 1000/24; // durata del fotogramma in 1/1000 di secondo (1000/24 == 24 FPS)
periodi=3; // deve essere un numero intero per un ciclo di animazione fluido
targetFile = "$desktop/DeleteMeAnimated.gif";
// crea un modello di tabella dati per l'animazione
dt = Nuova tabella( "animate", addrows(nBars), Nuova colonna( "ID", formula(row()) ), Nuova colonna( "Valore", formula(sin(2*pi()*row()/ nBar)) ) );
dt<
// crea un grafico segnaposto.NOTA: utilizzare Graph Builder interattivo per creare il grafico e
// usa Save Script per creare questo JSL!Apporta piccole modifiche in seguito.
gb = dt<
Dimensione( xsize, ysize ), Mostra pannello di controllo( 0 ), Mostra legenda( 0 ), Mostra piè di pagina( 0 ), Blocca scale( 1 ),
Variabili( X( :ID ), Y( :Value ), Colore( :Value ) ), Elementi( Barra( X, Y, Legenda( 9 ) ) ),
SendToReport( Dispatch( {}, "ID", ScaleBox,
{Min( 0 ), Max( nBars+1 ), Inc( 2 ), Minor Ticks( 1 ), Label Row(
{Dimensione carattere automatica( 0 ), Segni di graduazione automatici ( 0 ), Mostra etichette principali ( 0 ), Mostra graduazioni maggiori ( 0 ), Mostra graduazioni secondarie ( 0 )}
)} ),
Dispatch({}, "Valore", ScaleBox,
{Min( -1.092929 ), Max( 1.10606060606061 ), Inc( 0.5 ), Tick minori( 1 ), Riga etichetta(
{Dimensione carattere automatica( 0 ), Segni di graduazione automatici ( 0 ), Mostra etichette principali ( 0 ), Mostra graduazioni maggiori ( 0 ), Mostra graduazioni secondarie ( 0 )}
)} ),
Dispatch( {}, "400", ScaleBox, {Legend Model( 9, Properties( 0,
{gradiente( {Tema colore( "Da verde a nero a rosso" ), Valori di scala( [-1 1] ), Formato etichetta( "Fixed Dec", 15, 1 ),
Gradiente inverso( 1 ), N etichette( 5 )}
)} ) )} ),
Dispatch( {}, "titolo grafico", TextEditBox, {Set Text( "" )} ),
Dispatch({}, "X title", TextEditBox, {Set Text( "" )} ),
Dispatch( {}, "Y title", TextEditBox, {Set Text( "" )} )
)
);
// imposta il frame box delle dimensioni esatte necessarie; Dopo
// il <
// linea di confine indesiderata
(report(gb)[framebox(1)])<
aspetta(0); // assicurati che il grafico sia visibile.Non richiesto, ma mostra i progressi.
For( iFrame = 1, iFrame <= nFrame, iFrame++,
frameFraction = iFrame / (periodi*nFrames);
// rende tutte le barre fuori fase
For( iPhase = 1, iPhase <= nBar, iPhase++,
phaseFraction = iPhase / nBars;
dt:Value[iPhase] = Sin(periodi * (frameFraction * 2 * Pi() + phaseFraction * 2 * Pi()) );
);
// le sbarre hanno nuove altezze; Fai una foto
gb << finestra di aggiornamento;
img = ( report(gb)[framebox( 1 )] )<
dimensione intera = img<
// ritaglia il bordo di 3 pixel e la linea del bordo.Un po' di prove ed errori...
img<
//newsize=img<
//mostra(dimensione intera,nuova dimensione); // parametri
se ( iFrame == 1,
finalImage = img; // avvia la gif animata con la prima immagine
, // altro
finalImage<
finalImage<
);
finalImage<
);
gb<
close(dt,nosave);
finalImage<
show(dimensionefile(targetFile));
open(targetFile); // demo in un browser, forse.