我经常使用 openvar('myArrayName') 来浏览我的数据。然而,我被 Excel 一次性缩小所有列的能力宠坏了,这样我就可以看到大量数据。使用有限的桌面空间是非常令人窒息的,我必须一次查看这么少的列。手动调整每一列并不是一个好的解决方案,因为我不断地打开变量,而且它们通常有很多列。有没有办法批量缩小列数?
最佳答案
这不是一个完美的解决方案,但可以帮助您入门。基本思路是先get a handle to underlying java table ,然后调整所有列的大小,例如按照建议here 。您可以下载TableColumnAdjuster java 类,将其打包成 jar 并使用 javaclasspath
加载。当使用 findjobj 搜索 java 句柄时,请注意表类将取决于您尝试显示的变量的类型(一些示例 here ),因此我们需要找到正确的句柄。
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
才能生效),但是一旦开始交互,列的大小仍可能会调整与表/数据。您需要进一步探索这个自定义表类以了解如何防止这种情况。
关于matlab - 在 Matlab 变量编辑器中使所有列变窄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38162924/