[Grafikgenerator] Stapelweises Anheften der Hover-Beschriftung für ausgewählte ZeilenVerehrte Gäste,
Aktuell verwende ich JMP16, um ein Diagramm zu erstellen.
Ich habe eine Spalte mit einem Bild darin und möchte das Bild für jeden ausgewählten Punkt anheften, indem ich die Option „Beschriftung hinzufügen“ für diese Spalte aktiviere.
Ich stelle jedoch fest, dass ich die Punkte nur einzeln anheften kann, indem ich mit dem Mauszeiger darüberfahre, warte, bis die Beschriftung erscheint, und dann auf die Schaltfläche „Anheften“ klicke.
Gibt es eine schnellere Möglichkeit, dies mit JSL-Code zu erreichen? Ich habe Millionen von Zeilen und muss die Bilder anzeigen.
Danke!
Automatisierung und SkripterstellungBetreff: [Grafikgenerator] Stapelverarbeitung zum Anheften der Hover-Beschriftung für ausgewählte ZeilenMuss es eine Hover-Beschriftung sein? Oder könnten Sie das Bild als Symbol in Ihrem Diagramm verwenden? Zum Beispiel anhand des Beispieldatensatzes „Big Class Families“:

Wenn Sie nur Bilder für ausgewählte Zeilen wünschen, können Sie diese auswählen und die Auswahl in Spalte benennen. Anschließend können Sie diese Spalte verwenden, um eine Transformationsspalte zu erstellen, wie folgt:
// Open Data Table: Big Class Families.jmp
// → Data Table( "Big Class Families" )
Open( "$SAMPLE_DATA/Big Class Families.jmp" );
// Name selection in column: Use Images
Data Table( "Big Class Families" ) << Clear Select <<
Select Rows( [1, 6, 14, 15, 16] ) <<
Name Selection in Column( Column Name( "Use Images" ), Selected( 1 ) );
Graph Builder(
Transform Column( "Transform[height]", Formula( :height * :Use Images ) ),
Size( 648, 551 ),
Show Control Panel( 0 ),
Variables(
X( :weight ),
Y( :height ),
Y( :"Transform[height]"n, Position( 1 ) )
),
Elements(
Points( X, Y( 1 ), Y( 2 ), Legend( 3 ) ),
Points( X, Y( 2 ), Legend( 5 ), Set Shape Column( :picture ) )
)
);
Ich habe das Skript beigefügt, damit Sie die Ergebnisse mit einem Klick sehen können. Dies ist aber auch ohne Skripting direkt im Graph Builder möglich. Die wichtigsten Funktionen sind „Spalten transformieren“ und „Spaltenform festlegen“ .
Betreff: [Grafikgenerator] Stapelverarbeitung zum Anheften der Hover-Beschriftung für ausgewählte ZeilenHier ist ein Beispiel für das Fixieren der Hover-Labels. Interessant ist die nullbasierte Indizierung der Auswahl. Eventuell sollte dies so angepasst werden, dass auch der Fall berücksichtigt wird, dass keine Zeilen ausgewählt sind.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
dt << Select Rows( [1 5 7] );
pin_expr = {};
For Each( {v, i}, dt << Get Selected Rows,
Insert Into(
pin_expr,
Eval(
Eval Expr(
{Add Pin Annotation(
Seg( Marker Seg( 1 ) ),
Index( Expr( v - 1 ) ),
Index Row( Expr( v - 1 ) ),
UniqueID( Expr( v - 1 ) )
)}
)
)
)
);
Eval(
Substitute(
Expr(
dt << Graph Builder(
Size( 658, 556 ),
Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 5 ) ) ),
SendToReport( Dispatch( {}, "Graph Builder", FrameBox, __pin_expr__ ) )
)
),
Expr( __pin_expr__ ), Name Expr( pin_expr )
)
);

Betreff: [Grafikgenerator] Stapelverarbeitung zum Anheften der Hover-Beschriftung für ausgewählte ZeilenDanke für die Antwort! Die Funktion „Formspalte festlegen“ funktioniert super, aber es wäre noch besser, wenn die Punkte auch angezeigt würden. Das ist definitiv ein praktischer Ansatz!
Betreff: [Grafikgenerator] Stapelverarbeitung zum Anheften der Hover-Beschriftung für ausgewählte Zeilen
For Each( {v, i}, row_selection,
local_x = Column( dt, col_x )[v];
local_y = Column( dt, col_y )[v];
Insert Into(
pin_expr,
Eval(
Eval Expr(
{Add Pin Annotation(
Seg( Marker Seg( 1 ) ),
Index( Expr( v - 1 ) ),
Origin( {Expr( local_x ), Expr( local_y )} ),
Index Row( Expr( v - 1 ) ),
UniqueID( Expr( v - 1 ) ),
Offset( {-50, -45} ),
Replace Text( " " ),
Filled( 0 ),
Tag Line( 1 )
)}
)
)
);
);
Super! Es funktioniert, aber ohne die Ursprungseinstellung waren alle meine Anmerkungen an derselben Position fixiert. Um das zu beheben, habe ich die Werte der x- und y-Achse ausgelesen und dem Ursprung zugewiesen. Das funktioniert einwandfrei mit numerischen Achsen, aber bei Zeichenspalten stürzt die App ab. Gibt es eine Lösung für Zeichenspalten? Danke!
Betreff: [Grafikgenerator] Stapelverarbeitung zum Anheften der Hover-Beschriftung für ausgewählte ZeilenBei nominalen/ordinalen Spalten beginnt die Achse bei 0 und wird mit jedem Wert um 1 erhöht. Dies können Sie in den Achseneinstellungen überprüfen.

Sie können eine Logik schreiben, die dies anhand der Datentabelle erledigt, oder, falls Sie ein Punktdiagramm haben, können Sie die Werte von den Markierungen abrufen.
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(Variables(X(:age), Y(:height)), Elements(Points(X, Y, Legend(3))));
ms = report(gb)[framebox(1)] << find seg(markerseg(1));
Show(ms << Get X Values, ms << Get Y Values);
Betreff: [Grafikgenerator] Stapelverarbeitung zum Anheften der Hover-Beschriftung für ausgewählte ZeilenDanke! Es scheint alle X/Y-Werte zurückzugeben, aber wie kann ich die x/y-Koordinaten der ausgewählten Zeilen auslesen? Ich habe den unten stehenden Code ausprobiert, aber die zurückgegebenen x/y-Koordinaten entsprechen nicht der Auswahl.
r = dt << Get Selected Rows();
ms = Report(gb)[framebox(1)] << Find Seg( Marker Seg( 1 ) );
For Each( {v, i}, r,
t = ms << Get Point( v );
x = t[1];
y = t[2];
show(x,y);
);
Betreff: [Grafikgenerator] Stapelverarbeitung zum Anheften der Hover-Beschriftung für ausgewählte ZeilenFür mich scheint dies korrekte Werte zurückzugeben.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(Variables(X(:age), Y(:height)), Elements(Points(X, Y, Legend(3))));
dt << Select Rows([1, 10, 16, 20, 30]);
ms = Report(gb)[framebox(1)] << Find Seg(Marker Seg(1));
selrows = dt << Get Selected Rows();
For Each({currow}, selrows,
coord = ms << Get Point(currow);
Show(coord);
);

coord = {0, 59};
coord = {1, 61};
coord = {1, 65};
coord = {1, 63};
coord = {2, 61};
coord = {2, 62};
coord = {3, 67};
Betreff: [Grafikgenerator] Stapelverarbeitung zum Anheften der Hover-Beschriftung für ausgewählte ZeilenAh, jetzt verstehe ich das Problem: Das Ausblenden oder Ausschließen von Zeilen führt zu einem Indexkonflikt bei den verbleibenden Daten.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(Variables(X(:age), Y(:height)), Elements(Points(X, Y, Legend(3))));
dt << Select Rows([1, 10, 16, 20, 30]);
ms = Report(gb)[framebox(1)] << Find Seg(Marker Seg(1));
selrows = dt << Get Selected Rows();
pin_expr = {};
For Each({v}, selrows,
coord = ms << Get Point(v);
Show(coord);
Insert Into(
pin_expr,
Eval(
Eval Expr(
{Add Pin Annotation(
Seg( Marker Seg( 1 ) ),
Index Row( Expr( v - 1 ) ),
Origin( Expr(coord)),
UniqueID( Expr( v - 1 ) )
)}
)
)
)
);
Eval(
Substitute(
Expr( Report(gb)[framebox(1)] << __pin_expr__ ),
Expr( __pin_expr__ ), Name Expr( pin_expr )
)
);
Durch die Verwendung dieses Codes werden die Anmerkungen der Zeilen 20/30 an die falschen Positionen verschoben, wenn Zeile 17 ausgeblendet/ausgeschlossen wird.
Gibt es eine Möglichkeit, das zu verhindern? Ich meine, ich habe auf jeden Fall Datenpunkte, die ausgeschlossen werden müssen.
Betreff: [Grafikgenerator] Stapelverarbeitung zum Anheften der Hover-Beschriftung für ausgewählte ZeilenDas funktioniert, danke Leute!
ex = dt << Get Excluded Rows;
pin_expr = {};
For Each( {v}, dt << Get Selected Rows,
offset = N Rows(Loc(ex < v));
coord = ms << Get Point(v - offset);
Betreff: [Grafikgenerator] Stapelverarbeitung zum Anheften der Hover-Beschriftung für ausgewählte ZeilenIch würde die bereits ausgeschlossenen Zeilen aus selrows entfernen.
selrows = dt << Get Rows Where(Selected() & !Excluded())
Betreff: [Grafikgenerator] Stapelverarbeitung zum Anheften der Hover-Beschriftung für ausgewählte ZeilenSchlechte Nachrichten: Wenn der Graph-Builder einen lokalen Datenfilter verwendet, stimmt der Index nicht überein.
Gibt es eine Möglichkeit, mit Graphen umzugehen, bei denen ein lokaler Filter aktiv ist?
Betreff: [Grafikgenerator] Stapelverarbeitung zum Anheften der Hover-Beschriftung für ausgewählte ZeilenSie können die Zeilen abrufen, die der lokale Datenfilter anzeigt, indem Sie eine Nachricht senden.
<< Get Filtered Rows;
zum lokalen Datenfilter
Betreff: [Grafikgenerator] Stapelverarbeitung zum Anheften der Hover-Beschriftung für ausgewählte ZeilenVielen Dank für Ihre Hilfe! Ich bin fast am Ziel!
Gibt es eigentlich eine Möglichkeit, die von den Skripten hinzugefügten Anmerkungen stapelweise zu entfernen?
gb << SendToReport( Dispatch( {}, "Graph Builder", FrameBox(__which__), __pin_expr__ ) )
Betreff: [Grafikgenerator] Stapelverarbeitung zum Anheften der Hover-Beschriftung für ausgewählte ZeilenWenn Sie alle Referenzen dazu finden, könnten Sie die Option „<< Schließen“ oder „<< Nachricht löschen“ für die Liste festlegen, um alle gleichzeitig zu entfernen. Sie könnten außerdem vor dem Löschen die Option „<< ungültig“ und danach die Option „<< Fenster aktualisieren“ verwenden.
Betreff: [Grafikgenerator] Stapelverarbeitung zum Anheften der Hover-Beschriftung für ausgewählte ZeilenMein Code ist für einen vorhandenen Graph-Builder ausgelegt, der durch gb = (Current Report() << Find( "Graph Builder" )) << Get Scriptable Object abgerufen wird;
Dann habe ich, wie von mmarchandFSLR beschrieben, eine Eval-Schleife erstellt:
Es sieht so aus, als ob ich nur auf die GB selbst zugreifen kann, aber nirgends die Liste „Pin-Anmerkungen hinzufügen“ aus dem unten stehenden Code definieren kann:
Gibt es eine Möglichkeit, die eindeutige ID oder etwas Ähnliches von jedem einzelnen Element auszulesen und dann << delete darauf anzuwenden?
pin_expr = {};
For Each( {v, i}, dt << Get Selected Rows,
Insert Into(
pin_expr,
Eval(
Eval Expr(
{Add Pin Annotation(
Seg( Marker Seg( 1 ) ),
Index( Expr( v - 1 ) ),
Index Row( Expr( v - 1 ) ),
UniqueID( Expr( v - 1 ) )
)}
)
)
)
);
.....
If( N Items( pin_expr ) > 0,
Eval(
Substitute(
Expr(
gb << SendToReport( Dispatch( {}, "Graph Builder", FrameBox(__which__), __pin_expr__ ) )
),
Expr( __pin_expr__ ), Name Expr( pin_expr ),
)
)
);
Betreff: [Grafikgenerator] Stapelverarbeitung zum Anheften der Hover-Beschriftung für ausgewählte ZeilenNames Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
dt << select rows([1, 10, 21, 30, 40]);
gb = dt << Graph Builder(
Size(658, 556),
Show Control Panel(0),
Variables(X(:age), Y(:height)),
Elements(Points(X, Y, Legend(3)))
);
pins = {};
gb << inval;
frame = Report(gb)[FrameBox(1)];
For Each({currow}, dt << Get Selected Rows,
Eval(EvalExpr(
Insert Into(pins, frame << Add Pin Annotation(
Seg(Marker Seg(1)),
Index(Expr(currow - 1)),
Index Row(Expr(currow - 1)),
UniqueID(Expr(currow - 1))
));
));
);
gb << update window;
wait(1); // demo purposes
pins << Delete;
Betreff: [Grafikgenerator] Stapelverarbeitung zum Anheften der Hover-Beschriftung für ausgewählte ZeilenAh, jetzt verstehe ich das Problem: Das Ausblenden oder Ausschließen von Zeilen führt zu einem Indexkonflikt bei den verbleibenden Daten.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(Variables(X(:age), Y(:height)), Elements(Points(X, Y, Legend(3))));
dt << Select Rows([1, 10, 16, 20, 30]);
ms = Report(gb)[framebox(1)] << Find Seg(Marker Seg(1));
selrows = dt << Get Selected Rows();
pin_expr = {};
For Each({v}, selrows,
coord = ms << Get Point(v);
Show(coord);
Insert Into(
pin_expr,
Eval(
Eval Expr(
{Add Pin Annotation(
Seg( Marker Seg( 1 ) ),
Index Row( Expr( v - 1 ) ),
Origin( Expr(coord)),
UniqueID( Expr( v - 1 ) )
)}
)
)
)
);
Eval(
Substitute(
Expr( Report(gb)[framebox(1)] << __pin_expr__ ),
Expr( __pin_expr__ ), Name Expr( pin_expr )
)
);
Durch die Verwendung dieses Codes werden die Anmerkungen der Zeilen 20/30 an die falschen Positionen verschoben, wenn Zeile 17 ausgeblendet/ausgeschlossen wird.
Gibt es eine Möglichkeit, dies zu verhindern? Ich meine, ich habe auf jeden Fall Datenpunkte, die ausgeschlossen werden müssen.
Betreff: [Grafikgenerator] Stapelverarbeitung zum Anheften der Hover-Beschriftung für ausgewählte ZeilenDanke jthi! Ich weiß das wirklich zu schätzen!
Betreff: [Grafikgenerator] Stapelverarbeitung zum Anheften der Hover-Beschriftung für ausgewählte Zeilen@jthi Entschuldigung, aber gibt es eine Beispielmethode wie im aktuellen Bericht / in der aktuellen Datentabelle, um den aktuell vom Benutzer ausgewählten Frame zu ermitteln?
Ich nutze das, aber nur, wenn dem Graphen das Skript hinzugefügt wurde.
For Each( {f, n}, frames,
Eval( Eval Expr( f << AddGraphicsScript( Handle( ::currentFrame = Expr( f ) ) ) ) )
);
Betreff: [Grafikgenerator] Stapelverarbeitung zum Anheften der Hover-Beschriftung für ausgewählte ZeilenSie können XPath verwenden, um nach dem ausgewählten Attribut (mit dem Wert „true“) zu suchen.
Names Default To Here(1);
//This message applies to all display box objects
dt = Open("$SAMPLE_DATA/Big Class.jmp");
biv = dt << Run Script("Bivariate");
Report(biv)[FrameBox(1)] << Select(1);
report(biv) << XPath("//FrameBox[@selected='true']");
Betreff: [Grafikgenerator] Stapelverarbeitung zum Anheften der Hover-Beschriftung für ausgewählte ZeilenDanke! Ich muss den Rahmen unter dem Mauszeiger (egal ob beim Überfahren oder Anklicken) auswählen. Ich habe überlegt, S + Klick zur Auswahl zu verwenden, aber gibt es eine einfachere Möglichkeit?
Betreff: [Grafikgenerator] Stapelverarbeitung zum Anheften der Hover-Beschriftung für ausgewählte ZeilenIn JMP ist dies deutlich schwieriger, da der Zugriff auf die Cursorposition (in den meisten Fällen) nicht einfach ist. Selbst wenn dies möglich wäre, müsste man noch berechnen, welcher Frame sich unter den entsprechenden Koordinaten befindet. Man kann zwar einen Klick auslösen, muss aber zuvor jedem Frame ein Grafikskript hinzufügen (Grafikskripte werden durch Mausklicks, das Bewegen des Mauszeigers über Punkte, das Halten und Ziehen usw. ausgelöst). Je nachdem, was Ihr Skript bewirken soll, gibt es möglicherweise weitere Optionen. Sie könnten beispielsweise dem Benutzer eine Liste von Frames bereitstellen, ihn auswählen lassen, welchem Frame das Grafikskript hinzugefügt werden soll, und ihn anschließend auffordern, auf „OK“ zu klicken.