intrigues interactivesQuelqu'un a-t-il des idées sur la façon de créer des rapports interactifs ?
Dans le rapport, je souhaite inclure des graphiques avec plusieurs lignes dans chaque graphique. Sur le côté gauche de la fenêtre, je souhaite avoir une liste des lignes. Lorsque je clique sur une ligne de la liste, je souhaite que la ligne sélectionnée dans le graphique soit plus visible, tandis que les lignes restantes sont atténuées.
Exploration et visualisation des donnéesRe: intrigues interactivesAvoir une légende sur le côté gauche peut être un peu délicat, mais si le côté droit convient, le générateur de graphiques de base devrait suffire

https://www.jmp.com/support/help/en/18.0/#page/jmp/graph-builder.shtml#
Re: intrigues interactivesBonjour ! J'ai utilisé une boucle for pour créer plusieurs graphiques à l'aide du générateur de graphiques. Maintenant, je voudrais regrouper tous ces graphiques sur une seule feuille et créer une interface interactive pour que les utilisateurs puissent interagir avec tous les graphiques ensemble. Existe-t-il un moyen d'y parvenir ? Merci !
Re: intrigues interactivesC'est une bonne idée d'utiliser simplement le générateur de graphiques de base, je veux juste les rassembler tous les uns sous les autres après les avoir tous créés.
Re: intrigues interactivesIl faut un peu plus d'informations. Vous pouvez par exemple les rassembler dans la liste déroulante V, puis les afficher à l'aide de la nouvelle fenêtre.
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = V List Box();
For(i = 1, i <= 3, i++,
gb_collector << Append(
dt << Graph Builder(
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
)
);
nw = New Window("",
gb_collector
);
Si vous utilisez la boucle For, je suppose que vous faites du scripting. Avez-vous lu le Guide de scripting (par exemple https://www.jmp.com/support/help/en/18.0/#page/jmp/examples-of-creating-a-dashboard-from-two-reports.shtml# ).
Re: intrigues interactivesJ'aimerais combiner la méthode de la boîte à onglets avec la boucle for, mais cela ne fonctionne pas.
Voici ma partie du script :
Nouvelle fenêtre (« Mon tableau de bord »,
Boîte de séparation H (
Taille (1000, 1000),
// Boucle pour chaque paramètre
Pour(i = 1, i <= N éléments(numPar), i++,
// Zones de colonnes pour les tracés de tous les lots, des données réelles et des différences
col1 = Col Box(""),
col2 = Col Box(""),
col3 = Col Box(""),
// Boîte de page à onglets pour chaque paramètre
Boîte de page à onglets (
Titre(numPar[i] || " vs. Point dans le temps"),
// Créer tous les lots de tracés
gb = Générateur de graphiques (
Taille (500, 500),
Variables(X(:Time Point Months), Y(:Result), Overlay(:Batch)),
Éléments (Points (X, Y))
),
// Filtre local : définir le lot uniquement sur les lots qui sont dans le cycle avec une référence, pas sur tous les autres lots
fr << Filtre de données locales(
invisible,
Ajouter un filtre (colonnes (:Composant, :Lot, :Tableau source),
Où(:Component == numPar[i]),
Où(:Batch == {cyc, bat}),
Où (:Table source == dt_name)
)
),
dt << Effacer Sélectionner(),
// Supprimer l'affichage du filtre du graphique
fr << Afficher le panneau de configuration (0),
// Rapport pour modification de tracé
gbb = Rapport(gb)[GraphBuilderBox(1)],
// Ajouter une régression linéaire
gbb << Ajouter un élément (1, 1, {Type ("Ligne d'ajustement"), X, Y, Confiance de l'ajustement (0), Équation (0)}),
// Définir l'axe Y
minval = min(:Result[dt << get rows where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 0.95,
maxval = max(:Result[dt << get rows where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 1.05,
maxvalts = max(:Time Point Mois[dt << obtenir les lignes où(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 1,05,
gbb[AxisBox(1)] << min(-0.1),
gbb[AxisBox(1)] << max(valeurs max),
gbb[AxisBox(2)] << min(valeur min),
gbb[AxisBox(2)] << max(valeur max),
gbb[AxisBox(2)] << inc((valeur max - valeur min) / 10),
// Définir l'étiquette de l'axe Y
unitList = Tableau associatif(:Résultat Unité[dt << obtenir les lignes où(:Composant == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Composant == numPar[i] & :Source Table == dt_name)]) << Supprimer("") << Obtenir les clés,
Si (N éléments (unitList) == 1,
gbb[Zone d'édition de texte(4)] << Définir le texte(numPar[i] || " [" || unitList[1] || "]")
,
gbb[Zone d'édition de texte(4)] << Définir le texte(numPar[i])
),
// Définir le titre du graphique
gbb[Zone d'édition de texte(1)] << Définir le texte(numPar[i] || " vs. Point temporel"),
// Ajouter
gbba = Rapport(gb),
col1 << Ajouter(gbba),
< )
)
),
< );
Re: intrigues interactivesNames Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = Tab Box(<< Set Style("Horizontal Spread"));
For(i = 1, i <= 3, i++,
gb_collector << Add("Title",
dt << Graph Builder(
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
)
);
nw = New Window("",
gb_collector
);Re: intrigues interactivesQuelle version de jmp avez-vous ? Est-ce que cela fonctionne dans votre jmp ? Parce que je n'ai pas le résultat attendu en utilisant le script ci-dessus
Re: intrigues interactivesJe ne sais pas quel est votre résultat attendu et je n'ai pas vos données. Le script utilise Tab Box pour collecter les résultats de la boucle for

Re: intrigues interactivesJ'ai ce résultat lorsque j'exécute le script ci-dessus. Ce n'est pas le même que vous
Re: intrigues interactivesIls semblent l'avoir modifié dans JMP18. Dans JMP17.2, cela semble fonctionner
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = Tab Box(<< Set Style("Horizontal Spread"));
For(i = 1, i <= 3, i++,
tab = Tab Page Box("",
gb = dt << Graph Builder(
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
);
tab << Title("Title " || Char(i));
gb << title(Char(i));
gb_collector << Append(tab)
);
nw = New Window("",
gb_collector
);Re: intrigues interactivesUn autre problème que je voudrais aborder est que lorsque j'ai un grand nombre d'onglets (par exemple, 20) avec des titres longs, les graphiques deviennent disproportionnellement grands, ce qui rend difficile leur observation claire. Je voudrais redimensionner les graphiques à une échelle plus petite tout en conservant les grands titres et les onglets. Est-il possible de positionner le graphique à gauche avec un espace vide à droite ?
Re: intrigues interactivesJe ne suis pas sûr de ce que vous entendez par « graphique à gauche avec un espace vide à droite ». Créez un graphique manuellement, redimensionnez-le un peu, copiez le script et il vous indiquera comment ajouter de la taille au graphique. Tab Box dispose également d'un débordement et d'autres options que vous pouvez trouver dans l'index des scripts

Re: intrigues interactivesJ'essaie de déterminer s'il existe un moyen de placer les graphiques comme dans cette capture d'écran. Par exemple, le premier graphique en premier, puis les deux autres ensemble.
Re: intrigues interactivesVous pouvez combiner par exemple la zone de liste V, la zone de liste H, la zone d'onglets, la zone de page d'onglets de différentes manières pour obtenir la mise en page souhaitée.
Vous pouvez trouver de nombreuses informations dans le Guide de script https://www.jmp.com/support/help/en/18.0/#page/jmp/construct-display-boxes-for-new-windows.shtml
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_expr = Expr(dt << Graph Builder(
Show Control Panel(0),
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
));
nw = New Window("",
V List Box(
gb_expr,
H List Box(
gb_expr,
gb_expr
)
)
);Re: intrigues interactivesLes noms par défaut sont ici (1);
dt = Ouvrir( "$SAMPLE_DATA/Big Class.jmp" );
gb_collector = Tab Box( "Tableau de bord" );
Pour( i = 1, i <= 20, i++,
// Zone de colonne pour le tracé de tous les lots
col1 = Col Box( "Tous les lots" || Char( i ) );
// Créer le premier tracé du Graph Builder
fr = Expr(
dt << Générateur de graphiques(
invisible,
Variables( X( :poids ), Y( :hauteur ), Superposition( :sexe ) ),
Éléments (Points (X, Y, Légende (9)), Ligne d'ajustement (X, Y, Légende (11)))
)
);
col1 << Append( gb );
// Créer une zone de colonne pour les deux tracés du Graph Builder
col2 = Col Box( "Données réelles " || Char( i ) );
// Créer et ajouter deux tracés Graph Builder à col2
Pour( j = 1, j <= 2, j++,
gbb = Expr(
dt << Générateur de graphiques(
invisible,
Variables( X( :poids ), Y( :hauteur ), Superposition( :sexe ) ),
Éléments (Points (X, Y, Légende (9)), Ligne d'ajustement (X, Y, Légende (11)))
)
);
col2 << Ajouter( gbb );
);
// Créez un onglet pour col1 et col2 et ajoutez-le à gb_collector
tab = Tab Page Box( " Quelque chose Quelque chose ",
Zone de liste V(
col1,
H List Box( col2 ) // Placer les deux tracés l'un à côté de l'autre
)
);
gb_collector << Ajouter( tab );
// Définir le titre pour GB
fr << titre( "dxfkgbdlk,xfhglihxfd" );
);
gb_collector << Ancrable( 1 );
gb_collector << Définir le débordement activé( 1 );
nw = Nouvelle fenêtre( "Tableau de bord",
collectionneur_gb
);
J'essaie d'utiliser l'exemple ci-dessus dans mon script. Mais je n'obtiens aucun résultat. Voici mon script :
Tableau de données actuel (dt) ;
dt << Nouvelle colonne("Time Point Months", Formule(Round(:Time Point Days/30.438), 2));
gb_collector = Boîte à onglets();
Pour(i = 1, i <= N éléments(numPar), i++,
// Zone de colonne pour le tracé de tous les lots
col1 = Col Box( "" );
// Zone de colonne pour le tracé des données réelles
col2 = Col Box( "" );
// Zone de colonne pour le tracé des différences
col3 = Col Box( "" );
//tab = Boîte de page à onglets("",
gb = dt << Générateur de graphiques(
//invisible,
Taille (700, 400),
Variables(X(:Time Point Months), Y(:Result), Overlay(:Batch)),
Éléments (Points (X, Y))
);
// Filtre local : définir le lot uniquement sur les lots qui sont dans le cycle avec une référence, pas sur tous les autres lots
fr << Filtre de données locales(
invisible,
Ajouter un filtre (colonnes (: composant, : lot, : table source),
Où(:Component == numPar[i]),
Où(:Batch == {cyc, bat}),
Où (:Table source == dt_name)
)
);
dt << Effacer Sélectionner();
// Supprimer l'affichage du filtre du graphique
gb << Afficher le panneau de configuration(0);
// Rapport pour modification de tracé
gbb = Rapport(gb)[GraphBuilderBox(1)];
// Ajouter une régression linéaire
gbb << Ajouter un élément(1, 1, {Type("Ligne d'ajustement"), X, Y, Confiance de l'ajustement(0), Équation(0)});
// Définir l'axe Y
minval = min(:Result[dt << get rows where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 0.95;
maxval = max(:Result[dt << get rows where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 1.05;
maxvalts = max(:Time Point Mois[dt << obtenir les lignes où(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 1,05;
gbb[AxisBox(1)] << min(-0.1);
gbb[AxisBox(1)] << max(valts max);
gbb[AxisBox(2)] << min(valeur min);
gbb[AxisBox(2)] << max(valeur max);
gbb[AxisBox(2)] << inc((valeur max - valeur min) / 10);
// Définir l'étiquette de l'axe Y
unitList = Tableau associatif(:Résultat Unité[dt << obtenir les lignes où(:Composant == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Composant == numPar[i] & :Source Table == dt_name)]) << Remove("") << Obtenir les clés ;
Si (N éléments (unitList) == 1,
gbb[Zone d'édition de texte(4)] << Définir le texte(numPar[i] || " [" || unitList[1] || "]")
,
gbb[Zone d'édition de texte(4)] << Définir le texte(numPar[i])
);
// Définir le titre du graphique
gbb[Zone d'édition de texte(1)] << Définir le texte(numPar[i] || " vs. Point dans le temps");
// Ajouter
//gbba = Rapport(gb),
col1 << Append(fr);
//filtre << fermer;
fr << fermer la fenêtre ;
// Dans la boucle via les paramètres, nous parcourons désormais également les lots
Pour (k = 1, k <= N éléments ( cyc ), k++,
vérifier = dt << obtenir les lignes où(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name | :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name);
if(N items(check) > 0, // Créer une vérification pour voir si le paramètre existe pour le lot actuel
// Créer un tracé de base
gb = Générateur de graphiques (
//invisible,
Taille (700, 400),
Variables( X( : Mois du point temporel ), Y( : Résultat ), Superposition( : Lot ) ),
Éléments(Points(X, Y), )
);
gb << Filtre de données local(invisible, Ajouter un filtre( colonnes( :Component, :Batch, :Source Table ), Où( :Component == numPar[i] ), Où( :Batch == {cyc[k], bat[k]}), Où( :Source Table == dt_name) ));
dt << Effacer Sélectionner();
// Supprimer l'affichage du filtre du graphique
gb << Afficher le panneau de configuration( 0 );
// Rapport pour modification de tracé
gbb = Rapport( gb )[GraphBuilderBox( 1 )];
// Ajouter une régression linéaire
gbb << Ajouter un élément( 1, 1, {Type( "Ligne d'ajustement" ), X, Y, Confiance d'ajustement( 0 ), Équation( 0 )} );
// Définir l'axe Y
minval = min(:Result[dt << get rows where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name | :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)])*0.95;
maxval = max(:Result[dt << get rows where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name| :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)])*1.05;
maxvalts = max(:Time Point Mois[dt << obtenir les lignes où(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name| :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)])*1.05;
gbb[AxisBox(1)] << min(-0.1);
gbb[AxisBox(1)] << max(valts max);
gbb[AxisBox(2)] << min(valeur min);
gbb[AxisBox(2)] << max(valeur max);
gbb[AxisBox(2)] << inc((valeur max-val min)/10);
// Définir l'étiquette de l'axe Y
unitList = Associative Array( :Result Unit[dt << obtenir les lignes où(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name | :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)] ) << Remove( "" ) << Obtenir les clés ;
Si( N éléments( unitList ) == 1,
gbb[Zone d'édition de texte( 4 )] << Définir le texte( numPar[i] || " [" || unitList[1] || "]" )
);
Si( N éléments( unitList ) != 1,
gbb[Zone d'édition de texte( 4 )] << Définir le texte( numPar[i] )
);
// Définir le titre du graphique
gbb[Zone d'édition de texte( 1 )] << Définir le texte( numPar[i] || " vs. Point temporel ");
// Ajouter
//gbba = Rapport( gbb );
col2 << Ajouter( gbb );
//filtre << fermer;
fr << fermer la fenêtre ;
// Démarrer le deuxième tracé
gb2 = Générateur de graphiques(
//invisible,
Taille (700, 400),
Variables( X( Point temporel Mois ), Y( : Différence ), Couleur( : Lot ) ),
Éléments(Points(X, Y))
);
gb2 << Filtre de données local(invisible, Ajouter un filtre( colonnes( :Component, :Batch, :Source Table ), Où( :Component == numPar[i] ), Où( :Batch == cyc[k]), Où( :Source Table == dt5_name)));
dt4 << Effacer Sélectionner();
// Supprimer l'affichage du filtre du graphique
gb2 << Afficher le panneau de configuration( 0 );
// Rapport pour modification de tracé
gbb2 = Rapport( gb2 )[GraphBuilderBox( 1 )];
gbb2 << Ajouter un élément( 1, 1, {Type( "Ligne" ), X, Y} );
// Obtenir la valeur HC
l_idx = dt4 << Obtenir les lignes où (dt4:Component == numPar[i] & :Batch == cyc[k]);
ul = min(dt4:HC[l_idx]);
si (manquant(ul),
si(min(:Différence[dt << obtenir les lignes où(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)]) == 0,
minval = -5 ;
valeur maximale = 5,
minval = min(:Différence[dt << obtenir les lignes où(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)])*0.95;
maxval = max(:Différence[dt << obtenir les lignes où(:Composant == numPar[i] & :Batch == cyc[k] & :Table source == dt5_name)])*1.05;
),
minval = min(:Différence[dt << obtenir les lignes où(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)],-ul)*1.05;
maxval = max(:Différence[dt << obtenir les lignes où(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)], ul)*1.05;
);
if(!ismising(ul), //si aucune valeur HC ne crée pas de ligne de limite
gbb2[AxisBox(2)] << Ajouter une ligne de référence(ul,"solid", noir, char(round(ul,2)));
gbb2[AxisBox(2)] << Ajouter une ligne de référence(-ul,"solid", noir, char(round(-ul,2)));
);
gbb2[AxisBox(2)] << Ajouter une ligne de référence(0,"Pointillé");
gbb2[AxisBox(2)] << min(valeur min);
gbb2[AxisBox(2)] << max(valeur max);
gbb2[AxisBox(2)] << inc((valeur max-val min)/10);
//Ajouter
//gbba2 = Rapport( gbb2 );
col3 << Ajouter( gbba2 );
//filtre << fermer;
gb2 << fermer la fenêtre ;
);
);
//);
tab = Boîte de page à onglets(numPar[i],
Zone de liste V(
col1
H List Box( col2, col3 ) // Placer les deux tracés l'un à côté de l'autre
)
);
onglet << Titre(numPar[i]);
//gb << titre(Char(1));
gb_collector << Ajouter(onglet);
);
gb_collector << Ancrable( 1 );
gb_collector << Définir le débordement activé( 1 );
nw = Nouvelle fenêtre("Mon tableau de bord",
collectionneur_gb
);
Peux-tu s'il te plaît m'aider à trouver comment le faire ?
Re: intrigues interactivesVous devez prendre du recul et expliquer ce que vous voulez : dans le meilleur des cas, fournissez des exemples de données ou utilisez l'un des exemples de données JMP pour expliquer ce que vous souhaitez avoir dans le plus petit exemple possible.
Re: intrigues interactivesNames Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = Tab Box("Dashboard");
For(i = 1, i <= 20, i++,
// Column box for plot of all batches
col1 = Col Box("All Batches" || Char(i));
// Create the first Graph Builder plot
gb = Expr(
dt << Graph Builder(
invisible,
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
);
col1 << Append(gb);
// Create a column box for the two Graph Builder plots
col2 = Col Box("Actual Data " || Char(i));
// Create and append two Graph Builder plots to col2
For(j = 1, j <= 2, j++,
gbb = Expr(
dt << Graph Builder(
invisible,
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
);
col2 << Append(gbb);
);
// Create a tab for col1 and col2 and append it to gb_collector
tab = Tab Page Box(
" Something Something ",
V List Box(
col1,
H List Box(col2) // Placing the two plots next to each other
)
);
gb_collector << Append(tab);
// Set title for gb
gb << title("Title");
);
gb_collector << Dockable(1);
gb_collector << Set Overflow Enabled(1);
nw = New Window("Dashboard", gb_collector);
Here is the example that i use and i am trying to follow the same structure in my own script.Re: intrigues interactivesTableau de données actuel (dt) ;
dt << Nouvelle colonne("Time Point Months", Formule(Round(:Time Point Days/30.438), 2));
gb_collector = Boîte à onglets();
Pour(i = 1, i <= N éléments(numPar), i++,
// Zone de colonne pour le tracé de tous les lots
col1 = Col Box( "" );
// Zone de colonne pour le tracé des données réelles
col2 = Col Box( "" );
// Zone de colonne pour le tracé des différences
col3 = Col Box( "" );
//tab = Boîte de page à onglets("",
gb = dt << Générateur de graphiques(
//invisible,
Taille (700, 400),
Variables(X(:Time Point Months), Y(:Result), Overlay(:Batch)),
Éléments (Points (X, Y))
);
// Filtre local : définir le lot uniquement sur les lots qui sont dans le cycle avec une référence, pas sur tous les autres lots
fr << Filtre de données locales(
invisible,
Ajouter un filtre (colonnes (: composant, : lot, : table source),
Où(:Component == numPar[i]),
Où(:Batch == {cyc, bat}),
Où (:Table source == dt_name)
)
);
dt << Effacer Sélectionner();
// Supprimer l'affichage du filtre du graphique
gb << Afficher le panneau de configuration(0);
// Rapport pour modification de tracé
gbb = Rapport(gb)[GraphBuilderBox(1)];
// Ajouter une régression linéaire
gbb << Ajouter un élément(1, 1, {Type("Ligne d'ajustement"), X, Y, Confiance de l'ajustement(0), Équation(0)});
// Définir l'axe Y
minval = min(:Result[dt << get rows where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 0.95;
maxval = max(:Result[dt << get rows where(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 1.05;
maxvalts = max(:Time Point Mois[dt << obtenir les lignes où(:Component == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Component == numPar[i] & :Source Table == dt_name)]) * 1,05;
gbb[AxisBox(1)] << min(-0.1);
gbb[AxisBox(1)] << max(valts max);
gbb[AxisBox(2)] << min(valeur min);
gbb[AxisBox(2)] << max(valeur max);
gbb[AxisBox(2)] << inc((valeur max - valeur min) / 10);
// Définir l'étiquette de l'axe Y
unitList = Tableau associatif(:Résultat Unité[dt << obtenir les lignes où(:Composant == numPar[i] & :Batch == cyc & :Source Table == dt_name | :Batch == bat & :Composant == numPar[i] & :Source Table == dt_name)]) << Remove("") << Obtenir les clés ;
Si (N éléments (unitList) == 1,
gbb[Zone d'édition de texte(4)] << Définir le texte(numPar[i] || " [" || unitList[1] || "]")
,
gbb[Zone d'édition de texte(4)] << Définir le texte(numPar[i])
);
// Définir le titre du graphique
gbb[Zone d'édition de texte(1)] << Définir le texte(numPar[i] || " vs. Point dans le temps");
// Ajouter
//gbba = Rapport(gb),
col1 << Append(fr);
//filtre << fermer;
fr << fermer la fenêtre ;
// Dans la boucle via les paramètres, nous parcourons désormais également les lots
Pour (k = 1, k <= N éléments ( cyc ), k++,
vérifier = dt << obtenir les lignes où(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name | :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name);
if(N items(check) > 0, // Créer une vérification pour voir si le paramètre existe pour le lot actuel
// Créer un tracé de base
gb = Générateur de graphiques(
//invisible,
Taille (700, 400),
Variables( X( : Mois du point temporel ), Y( : Résultat ), Superposition( : Lot ) ),
Éléments(Points(X, Y), )
);
gb << Filtre de données local(invisible, Ajouter un filtre( colonnes( :Component, :Batch, :Source Table ), Où( :Component == numPar[i] ), Où( :Batch == {cyc[k], bat[k]}), Où( :Source Table == dt_name) ));
dt << Effacer Sélectionner();
// Supprimer l'affichage du filtre du graphique
gb << Afficher le panneau de configuration( 0 );
// Rapport pour modification de tracé
gbb = Rapport( gb )[GraphBuilderBox( 1 )];
// Ajouter une régression linéaire
gbb << Ajouter un élément( 1, 1, {Type( "Ligne d'ajustement" ), X, Y, Confiance d'ajustement( 0 ), Équation( 0 )} );
// Définir l'axe Y
minval = min(:Result[dt << get rows where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name | :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)])*0.95;
maxval = max(:Result[dt << get rows where(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name| :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)])*1.05;
maxvalts = max(:Time Point Mois[dt << obtenir les lignes où(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name| :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)])*1.05;
gbb[AxisBox(1)] << min(-0.1);
gbb[AxisBox(1)] << max(valts max);
gbb[AxisBox(2)] << min(valeur min);
gbb[AxisBox(2)] << max(valeur max);
gbb[AxisBox(2)] << inc((valeur max-val min)/10);
// Définir l'étiquette de l'axe Y
unitList = Associative Array( :Result Unit[dt << obtenir les lignes où(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt_name | :Batch == bat[k] & :Component == numPar[i] & :Source Table == dt_name)] ) << Remove( "" ) << Obtenir les clés ;
Si( N éléments( unitList ) == 1,
gbb[Zone d'édition de texte( 4 )] << Définir le texte( numPar[i] || " [" || unitList[1] || "]" )
);
Si( N éléments( unitList ) != 1,
gbb[Zone d'édition de texte( 4 )] << Définir le texte( numPar[i] )
);
// Définir le titre du graphique
gbb[Zone d'édition de texte( 1 )] << Définir le texte( numPar[i] || " vs. Point temporel ");
// Ajouter
//gbba = Rapport( gbb );
col2 << Ajouter( gbb );
//filtre << fermer;
fr << fermer la fenêtre ;
// Démarrer le deuxième tracé
gb2 = Générateur de graphiques(
//invisible,
Taille (700, 400),
Variables( X( Point temporel Mois ), Y( : Différence ), Couleur( : Lot ) ),
Éléments(Points(X, Y))
);
gb2 << Filtre de données local(invisible, Ajouter un filtre( colonnes( :Component, :Batch, :Source Table ), Où( :Component == numPar[i] ), Où( :Batch == cyc[k]), Où( :Source Table == dt5_name)));
dt4 << Effacer Sélectionner();
// Supprimer l'affichage du filtre du graphique
gb2 << Afficher le panneau de configuration( 0 );
// Rapport pour modification de tracé
gbb2 = Rapport( gb2 )[GraphBuilderBox( 1 )];
gbb2 << Ajouter un élément( 1, 1, {Type( "Ligne" ), X, Y} );
// Obtenir la valeur HC
l_idx = dt4 << Obtenir les lignes où (dt4:Component == numPar[i] & :Batch == cyc[k]);
ul = min(dt4:HC[l_idx]);
si (manquant(ul),
si(min(:Différence[dt << obtenir les lignes où(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)]) == 0,
minval = -5 ;
valeur maximale = 5,
minval = min(:Différence[dt << obtenir les lignes où(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)])*0.95;
maxval = max(:Différence[dt << obtenir les lignes où(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)])*1.05;
),
minval = min(:Différence[dt << obtenir les lignes où(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)],-ul)*1.05;
maxval = max(:Différence[dt << obtenir les lignes où(:Component == numPar[i] & :Batch == cyc[k] & :Source Table == dt5_name)], ul)*1.05;
);
if(!ismissing(ul), //si aucune valeur HC ne crée pas de ligne de limite
gbb2[AxisBox(2)] << Ajouter une ligne de référence(ul,"solid", noir, char(round(ul,2)));
gbb2[AxisBox(2)] << Ajouter une ligne de référence(-ul,"solid", noir, char(round(-ul,2)));
);
gbb2[AxisBox(2)] << Ajouter une ligne de référence(0,"Pointillé");
gbb2[AxisBox(2)] << min(valeur min);
gbb2[AxisBox(2)] << max(valeur max);
gbb2[AxisBox(2)] << inc((valeur max-val min)/10);
//Ajouter
//gbba2 = Rapport( gbb2 );
col3 << Ajouter( gbba2 );
//filtre << fermer;
gb2 << fermer la fenêtre ;
);
);
//);
tab = Boîte de page à onglets(numPar[i],
Zone de liste V(
col1
H List Box( col2, col3 ) // Placer les deux tracés l'un à côté de l'autre
)
);
onglet << Titre(numPar[i]);
//gb << titre(Char(1));
gb_collector << Ajouter(onglet);
);
gb_collector << Ancrable( 1 );
gb_collector << Définir le débordement activé( 1 );
nw = Nouvelle fenêtre("Mon tableau de bord",
collectionneur_gb
);
Voici mon script..
Ci-joint une capture d'écran de mon tableau de bord actuel, qui contient 8 graphiques. Voici mes exigences spécifiques pour organiser ces graphiques :
- Conserver le premier graphique : Je souhaite conserver le premier graphique tel quel.
- Supprimer le deuxième graphique : Le deuxième graphique doit être supprimé du tableau de bord.
- Associez les six derniers graphiques : les six derniers graphiques doivent être associés de manière à ce que chaque paire soit affichée côte à côte. Plus précisément, les graphiques doivent être organisés comme suit :
- Les troisième et quatrième graphiques doivent être affichés l’un à côté de l’autre.
- Les cinquième et sixième graphiques doivent être affichés l’un à côté de l’autre.
- Les septième et huitième graphiques doivent être affichés l’un à côté de l’autre.
Pour résumer, la mise en page finale devrait avoir le premier graphique suivi de trois paires de graphiques, chaque paire étant affichée côte à côte.
Re: intrigues interactivesCes deux scripts sont totalement différents (veuillez également utiliser le formatage JSL pour le code JSL, il est beaucoup plus facile à lire). À quoi sert Col Box ? Sur quoi faites-vous une boucle (i et j) ? Qu'est-ce qui détermine les informations contenues dans chacun des graphiques ? Devraient-ils être interactifs les uns avec les autres ?