MATLAB热图:单元格标签的自动着色

时间:2017-06-15 17:04:39

标签: matlab fonts colors matlab-figure heatmap

我正在热图上绘制四个独特的数据集; x,y,单元格颜色,第四是单元格标签。可自定义的热图函数here提供了一种简单的方法,也可以自动调整热图的单元格中文本字体的颜色,以保持相对于单元格背景的高对比度。请参阅下面.fig的屏幕截图,其中文本已根据需要自动从黑色更改为白色:

Illegible text enclosed in overlaid orange box

JPG

  1. 如果.fig以.fig以外的任何格式保存,则文本字体颜色将恢复为默认黑色。第二张图片,一张从.fig中保存的jpeg,说明了这一点。如果使用export figmatlab2tikz包,这种令人惊讶的行为是相同的。如何获得.jpeg或.fig以外的其他格式并保持白色字体颜色?截取屏幕截图是不够的,因为如果使用光栅或矢量格式,我需要非常高分辨率的图像。
  2. 许多白化字体显示为颗粒状或别名。因此,它们几乎难以辨认。最糟糕的情况包含在橙色框中以突出显示它们。有没有解决这个问题?
  3. MWE:

    cell_text = 1:1:66;
    cell_colour_data = 53:1:(53+65);
    upper_colour_lim = max(cell_colour_data);
    lower_colour_lim = min(cell_colour_data);
    xvalues = 1:1:6;
    yvalues = 1:1:11;
    
    figure();
    my_colormap = bone;
    my_gridlines = '-';
    
    colour_data_layernum = reshape(cell_colour_data,...
        [length(yvalues),...
        length(xvalues)]);
    text_data_layernum = reshape(cell_text,...
        [length(yvalues),...
        length(xvalues)]);
    clabel = arrayfun(@(x){sprintf('%0.2f',x)}, text_data_layernum);
    
    heatmap_custom(colour_data_layernum, xvalues, yvalues, clabel,...
        'Colormap', my_colormap, 'GridLines', my_gridlines,...
        'TextColor', 'xor',...
        'MinColorValue', lower_colour_lim, 'MaxColorValue', upper_colour_lim);
    

    请注意,此程序包需要EraseMode来启动标签字体的颜色切换。由于引入Handle Graphics V2后不推荐使用EraseMode,因此您需要R2014a或更早版本才能复制此行为。

    请注意,如果未重命名从此File Exchange软件包下载的heatmap.m文件,您将会遇到MATLAB的heatmap.m函数的问题,这些问题很可能表现为下标索引错误。在上面的MWE中,下载的文件已重命名为heatmap_custom.m

0 个答案:

没有答案