我经常使用 openvar('myArrayName') 来浏览我的数据。然而,我被 Excel 一次性缩小所有列的能力宠坏了,这样我就可以看到大量数据。使用有限的桌面空间是非常令人窒息的,我必须一次查看这么少的列。手动调整每一列并不是一个好的解决方案,因为我不断地打开变量,而且它们通常有很多列。有没有办法批量缩小列数?
这不是一个完美的解决方案,但可以帮助您入门。基本思想是首先获取底层java表的句柄,然后调整所有列的大小,例如按照这里的建议。您可以下载 TableColumnAdjuster java 类,将其打包到 jar 中并使用
javaclasspath
加载。使用 findjobj
搜索 Java 句柄时,请注意表类将取决于您尝试显示的变量的类型(一些示例此处),因此我们需要找到正确的句柄。
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
才能生效),但是一旦开始与表/数据交互,列的大小仍然可能会调整。您需要进一步探索这个自定义表类以了解如何防止这种情况。
可以通过在表中的列名称中添加空格来加宽列:
Tbl=表([Var1,Var2,Var3]); Tbl.Properties.VariableNames={'---VarName1---','--VarName2--','-VarName3-'};