2016-07-02 9 views
2

Ich benutze oft Openvar ('myArrayName'), um meine Daten zu durchsuchen. Allerdings wurde ich durch die Fähigkeit von Excel verdorben, alle Spalten auf einmal zu verengen, so dass ich viele Daten sehen konnte. Es ist sehr erdrückend, den begrenzten Platz auf dem Desktop zu nutzen, den ich bei so wenigen Spalten gleichzeitig betrachten muss. Das manuelle Anpassen jeder Spalte ist keine gute Lösung, da ich ständig Variablen öffne und oft viele Spalten haben. Gibt es eine Möglichkeit, die Spalten auf eine bestimmte Art einzugrenzen?Machen Sie alle Spalten in Matlab Variablen Editor

Antwort

1

Dies ist keine perfekte Lösung, aber kann Ihnen den Anfang machen. Die Grundidee besteht darin, zunächst get a handle to underlying java table zu skalieren und dann alle Spalten, z. wie vorgeschlagen here. Sie können TableColumnAdjuster Java-Klasse herunterladen, in ein Glas verpacken und laden mit javaclasspath. Beachten Sie bei der Suche nach einem Java-Handle unter Verwendung von findjobj, dass die Tabellenklasse vom Typ der Variablen abhängt, die Sie anzeigen möchten (einige Beispiele here). Daher müssen wir das richtige Handle finden.

javaaddpath('path\to\TableColumnAdjuster.jar'); 
my_var= randn(1e4,10); 
openvar('my_var'); 
resizevar('my_var'); 

function resizevar(name) 
    desktop = com.mathworks.mde.desk.MLDesktop.getInstance(); 
    varclient = desktop.getClient(name); 
    jh = findjobj(varclient); 
    hNames = get(jh, 'Name'); 
    validNames = {'VariableTable','CellTable','DatasetVariableTable','TableObjectVariableTable','CategoricalVariableTable','TimeSeriesArrayEditorTablePanel:fDataTable'}; 
    jTable = jh(find(ismember(hNames, validNames),1)); 

    jTable.setAutoGrowthTemporarilyDisabled(true); 
    jTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF); 
    pause(0.1); 

    spacing = 10; 
    tca = TableColumnAdjuster(jTable, spacing); 
    tca.adjustColumns(); 
end 

Das Problem ist, dass Matlab Aktualisieren der Tabelle halten, wie Sie blättern und/oder die zugrunde liegende Datenänderungen, die die Breite zurückgesetzt werden (oder auch andere Nebenwirkungen haben, wie mehr leeren Spalten hinzufügen usw.). Wenn Sie die benutzerdefinierte Tabellenklasse erkunden, die von Matlab verwendet wird, werden Sie eine handliche setAutoGrowthTemporarilyDisabled-Methode bemerken. Wenn wir dies auf true setzen, können wir diese Nebenwirkungen vorübergehend vermeiden (pause scheint erforderlich zu sein, damit es wirksam wird), aber die Spaltengröße kann immer noch geändert werden, sobald Sie mit der Tabelle/Daten interagieren. Sie müssten diese benutzerdefinierte Tabellenklasse weiter untersuchen, um zu sehen, wie dies verhindert werden kann.

+0

Danke, nirvana-msu. Ich schätze, dass es keine magische Möglichkeit gibt, um eine programmatische Lösung zu umgehen, die unter der Oberfläche der GUI auftaucht. Ich werde das in absehbarer Zeit nicht tun (die Realität meiner Zeitsituation), aber zu wissen, dass dies tatsächlich die Situation ist, ist nützlich. Ich warte ein bisschen auf eine magische fertige Lösung, und wenn keine auftaucht, werde ich Ihre Antwort als Antwort markieren. – user36800

Verwandte Themen