我经常使用openvar(' myArrayName')来浏览我的数据。但是,我被Excel能够立刻缩小所有列的能力,让我看到了大量的数据。使用有限的桌面空间是非常令人窒息的,我必须同时查看这么少的列。手动调整每列不是一个好的解决方案,因为我经常打开变量,而且它们通常有很多列。有没有办法以批量方式缩小列?
答案 0 :(得分:1)
这不是一个完美的解决方案,但可以帮助您入门。基本想法是先get a handle to underlying java table,然后调整所有列的大小,例如按照建议here。您可以下载TableColumnAdjuster java类,将其打包到jar中并使用javaclasspath
加载。在使用findjobj
搜索java句柄时,请注意表类将取决于您尝试显示的变量的类型(某些示例here),因此我们需要找到正确的句柄。 / p>
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
问题是Matlab会在您滚动和/或底层数据更改时不断更新表,这可能会重置宽度(甚至还有其他副作用,例如添加更多空列等)。如果您探索Matlab使用的自定义表类,您会注意到一个方便的setAutoGrowthTemporarilyDisabled
方法。将其设置为true
可以让我们暂时避免这些副作用(pause
似乎需要它才能生效),但是一旦开始与表/数据交互,列仍然可以调整大小。您需要进一步探索此自定义表类,以了解如何防止这种情况。