Hallo,
Ich versuche einen Weg zu finden, um eine Momentaufnahme nur der belegten Zellen einer Datentabelle zu erstellen (dh ohne Seitenbereiche, leere Zeilen unten oder leere Spalten rechts).
Ich habe kürzlich die Data Grid Box-Anzeigebox entdeckt, mit der ich beinahe tun kann, was ich will - aber ich brauche eine Möglichkeit, sie so zu dimensionieren, dass das ausgefüllte Gitter von Zellen es vollständig ausfüllt. Ich kann dies manuell durch Ausprobieren tun, aber ich möchte es automatisch tun.
Ist das möglich? Ich füge unten ein Beispielskript bei, das veranschaulicht, was ich versuche.
Danke vielmals
// Start des Programms;
Namensvorgabe bis hier (1);
dt = Open ("$ SAMPLE_DATA / Popcorn.jmp");
dt << Seitenwand schließen; // Ich möchte nur das Datenraster sehen.
// Zuerst färbe ich einige Zellen, um etwas zu veranschaulichen.
// Jeder Ertrag unter 9 wird rot dargestellt.
CellsToPaint = dt << Zeilen bekommen wo (als Spalte (: Ertrag) <9);
: Ertrag << Farbzellen (RGB-Farbe (1, 0, 0), CellsToPaint);
// Jeder Ertrag von mehr als 15 wird grün dargestellt.
CellsToPaint = dt << Zeilen bekommen wo (als Spalte (: Ertrag)> 15);
: Ertrag << Farbzellen (RGB-Farbe (0, 1, 0), CellsToPaint);
// Platziere es in einer Data Grid Box, damit ich es als Bild kopieren kann;
dgb = Data Grid Box (); dgb << Set Data Table (dt);
// Wenn ich die Größe nicht verändere, werden zusätzliche leere Zeilen und Spalten sichtbar.
// Ich kann es manuell verkleinern - aber ich möchte dieses Bit automatisieren, wenn ich kann;
dgb << gesetzte Breite (325);
dgb << eingestellte Höhe (340);
// Mal sehen was ich jetzt habe;
neues Fenster ("My Data Grid Box", dgb);
Pfad = "$ DESKTOP / snapshot.png";
dgb << Bild speichern (Pfad, "png");
// Öffne es wieder in einem Bildfeld;
pb = Bildfeld (offen (Pfad, png));
// Und das endgültige Bild anzeigen;
neues Fenster ("Mein Snapshot", Panelbox ("Mein Snapshot", pb));
// Ende des Programms;
Ja, ich dachte, dass diese Verweise auf Farben aus einem bestimmten Grund da waren
. . .
Obwohl 'NumberColBox ()' und StringColBox () '' << textColor () 'und' << backgroundColor () '' verstehen, arbeiten diese für die gesamte Spalte, wie es vielleicht zu erwarten ist.
Bei der Bearbeitung der Seitenwände verwenden Sie bitte support@jmp.com, wenn Sie ein unerwartetes Verhalten feststellen.
Hallo Ian - ja, es stimmt, ich könnte es so machen. Die zugrunde liegende Motivation für die Frage war jedoch, dass ich die Zellenfarbe beibehalten wollte, die ich in die ursprüngliche Datentabelle eingebaut hatte. Ich glaube nicht, dass ich die Zellen in einer Tabellenbox einzeln färben kann, genauso wie ich die Zellen in einer Datentabelle färben kann. Ist das richtig?
Was mich verwirrt, ist etwas anderes, als ich das Beispiel oben in diesem Thread zusammengestellt hatte, sollten die Seitenteile der Datentabelle immer ausgeblendet sein, bevor ich den Screenshot machte (daher "dt << close side panel") Linie). Ich habe jedoch gerade entdeckt, dass ich dort einen Fehler gemacht habe: diese Zeile sollen "dt << close side panels (1)" sein. Dies scheint ordnungsgemäß zu funktionieren, aber wenn die Datentabelle anschließend in die Data Grid Box kopiert wird, wird das Seitenfeld manchmal (aber nicht immer) erneut angezeigt. Ich sehe, dass die Data Grid Box auch die Eigenschaft "
Danke vielmals,
David
In Anbetracht der Art und Weise, die Sie beschrieben haben, können Sie auch Folgendes versuchen:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Popcorn.jmp" );
tb = TableBox();
for(c=1, c<=NCol(dt), c++,
thisCol = Column(dt, c);
if ((thisCol << getDataType) == "Numeric",
// Numeric column
tb << Append(NumberColBox(thisCol << getName, thisCol << getValues)),
// Assumed Character column
tb << Append(StringColBox(thisCol << getName, thisCol << getValues))
);
);
Close(dt, NoSave);
tb << savePicture("$DESKTOP/snapshot.png", "png");