如何根据表格中的数据修改 Matlab 的 uitable 单元格颜色?

7
我有一个Matlab函数返回了一个uitable的结果。
表格有两列和很多行:第一列是“values”,第二列是某种“安全阈值/置信区间”。
我想要格式化输出,使某些单元格变成红色: 当第1列中的“value”超过第2列中对应的“安全阈值”时。
有没有办法只使用Matlab来实现这个功能?
PS: 我知道以下页面:
http://www.mathworks.de/matlabcentral/newsreader/view_thread/150507
但对我来说似乎需要做很多调整,我希望自从发布该帖子以来,Matlab已经赶上并内置了此功能?

不确定为什么你不想使用Yair的代码。我不认为这个功能可以原生地实现,尽管我可能错了;Yair有一个关于在MATLAB中执行不能原生实现的操作的整个博客。这肯定是一种黑客行为,并且依赖于未记录的特性,但那就是我会使用的代码。 - Dang Khoa
1
还有Yair Altman最近发布的博客文章:http://undocumentedmatlab.com/blog/uitable-customization-report/ - Amro
1个回答

10
如果你仔细阅读了讨论,你会发现UITABLE支持HTML内容...。
这是一个例子:
X = rand(100,2);

%# convert matrix of numbers to cell array of strings (right aligned)
XX = reshape(strtrim(cellstr(num2str(X(:)))), size(X));

%# find cells matching condition
idx = ( X(:,1) > X(:,2) );

%# use HTML to style these cells
XX(idx,1) = strcat(...
    '<html><span style="color: #FF0000; font-weight: bold;">', ...
    XX(idx,1), ...
    '</span></html>');

%# create table
f = figure;
h = uitable('Parent',f, 'Units','normalized', 'Position',[0.05 0.05 0.9 0.9]);

%# set table data
set(h, 'Data',XX)

screenshot


2
对于任何感兴趣的人,我在我的网站上发布了一篇专门(扩展)介绍这个问题的文章:http://UndocumentedMatlab.com/blog/uitable-cell-colors/ - Yair Altman
绝对值得一读,再次感谢Yair。也许你可以在这里发布一个小例子,展示“单元格渲染器”方法。你肯定会得到我的投票 :) - Amro
Amro - 感谢你的赞美之词。我在2011年发布了一个带有链接的答案,但由于“自我推广”和“只是一个点击链接”,它被删除了。当我询问时,我得到了很多冷水浇头,所以可以说这让我失去了动力... - Yair Altman
@YairAltman:很抱歉你有一个糟糕的经历。你的文章绝对是相关的,并解决了手头的问题。但我想如果你在链接中添加了摘要,那么它会更符合Stack Overflow的方式,这样答案就是自包含的(如果你仍然想这么做,可以进行更改并投票取消删除)......无论如何,让我说一声,你在MATLAB社区的贡献总是受到赞赏的。 - Amro
@Amro:我基于上述查询创建了一个新问题,谢谢! - user238469
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接