matlab, красиво отформатировать таблицу, без массивов ячеек - PullRequest
2 голосов
/ 18 февраля 2020

Спрашиваю, потому что я подозреваю, что есть простой способ, о котором я не знаю и не могу удовлетворить Google: я хочу красиво отформатировать массив ячеек, и таблица будет очень удобной. Как я могу отформатировать строки, содержащиеся в массиве ячеек, чтобы они были правильно отформатированы без каких-либо префиксов ' и {''}?

t={'a','b','c'}
cell2table(t,'VariableNames',{'1','2','3'})

ans =

  1×3 table

      1        2        3  
    _____    _____    _____

    {'a'}    {'b'}    {'c'}

Ответы [ 3 ]

3 голосов
/ 18 февраля 2020

Я слышу тебя. Мне тоже не нравятся эти кавычки.

Если вам не важна производительность, вы можете просто преобразовать все строки в категориальные с целью отображения.

t = {'a','b','c'};
tbl = cell2table(t,'VariableNames',{'1','2','3'});
tbl_for_display = varfun(@(x) categorical(x), tbl)

Производит :

tbl_for_display =
  1×3 table
    Fun_1    Fun_2    Fun_3
    _____    _____    _____
      a        b        c  

Вот более чистый способ сделать это с помощью вспомогательной функции:

function out = nice_table_for_display(tbl)
out = tbl;
for i = 1:width(tbl)
  if iscellstr(tbl{:,i}) || isstring(tbl{:,i})
    out.(out.Properties.VariableNames{i}) = categorical(tbl{:,i});
  end
end
end

Итак, вы делаете:

>> nice_table_for_display(tbl)
ans =
  1×3 table
    1    2    3
    _    _    _
    a    b    c

Или, если это не так хорошо, вам нужно go полностью и написать собственную замену для table.disp.

0 голосов
/ 20 февраля 2020

Благодаря Эндрю и другим, вот слегка безумная 'oneliner' / анонимная функция.

Работает путем преобразования всего содержимого таблицы в категориальный, а затем повторной сборки таблицы из этого категориального массива.

disp_table = @(tbl) disp(array2table(categorical(cellfun(@(x) num2str(x),table2cell(tbl),'uni',0)),'VariableNames',tbl.Properties.VariableNames));

%test the display function, create table...
tbl = cell2table({'a','b','c',NaN,-1,{'asdf asdf'}},'VariableNames',{'1','2','3','4','5','6'});
disp_table(tbl)

    1    2    3     4     5         6    
    _    _    _    ___    __    _________

    a    b    c    NaN    -1    asdf asdf

0 голосов
/ 18 февраля 2020

Вы не можете избавиться от '' или "", но вы можете использовать строки вместо символьных векторов для лучшего отображения таблицы в формате:

>> t = {"a","b","c"}

t =
  1×3 cell array
   {["a"]}    {["b"]}    {["c"]}

>> cell2table(t,'VariableNames',{'1','2','3'})

ans =
  1×3 table

     1      2      3 
    ___    ___    ___

    "a"    "b"    "c"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...