改变xlim时的奇怪行为

时间:2017-09-01 11:24:24

标签: matlab matlab-figure

使用下面的代码,我生成一个可以通过箭头键(左/右)跨越的图像。问题是,有时如果图形足够薄并且窗口(图像的可见光)位于正确位置,则整个图像变为蓝色。如果是由于像素太小,我会期望这种“蓝色”,无论窗口位置在哪里。测试数据可以在https://www.dropbox.com/s/rath8x3vxdbs0g6/data.csv?dl=0找到(我无法用随机数据重现问题)

我在Ubuntu 14.04上使用Matlab R2017a。

function plottest()
%PLOTTEST Summary of this function goes here
%   Detailed explanation goes here
    f = figure('Toolbar','none','Menubar','none');
    ax = axes(f);

    signal = struct(...
        'data',csvread('./data.csv'),...
        'range',[0,562.04],...
        'xdata',[0 10],...
        'ydata',[0.5 127.5],...
        'xlim',[0 5],...
        'ylim',[0 128]);

    set(ax,'Units','normalized');
    set(ax,'Position',[0.1 0.1 0.8 0.8]);

    h = imagesc(ax,[]);
    colorbar(ax);
    caxis(ax,signal.range);
    set(ax,'YLim',signal.ylim);
    set(ax,'XLim',signal.xlim);

    set(h,'XData',signal.xdata);
    set(h,'YData',signal.ydata);
    set(h,'CData',signal.data);

    signal.windowSize = signal.xlim(2) - signal.xlim(1);

    guidata(f,signal);
    set(f,'WindowKeyPressFcn',@keydownHandler);

end

function keydownHandler(obj,eventdata,~)
    signal = guidata(obj);
    if strcmp(eventdata.Key,'rightarrow')
        ax = findobj(obj,'Type','Axes');
        max_x = min([signal.xlim(2) + signal.windowSize*0.05,signal.xdata(2)]);
        fprintf('Setting limit to [%f,%f]\n',max_x-signal.windowSize,max_x);
        set(ax,'XLim',[max_x-signal.windowSize,max_x]);
    elseif strcmp(eventdata.Key,'leftarrow')
        ax = findobj(obj,'Type','Axes');
        min_x = max([signal.xlim(1) - signal.windowSize*0.05,0]);
        fprintf('Setting limit to [%f,%f]\n',min_x,min_x+signal.windowSize);
        set(ax,'XLim',[min_x,min_x+signal.windowSize]);
    else
        return;
    end
    signal.xlim = get(ax,'XLim');
    guidata(obj,signal);
end

实施例: enter image description here enter image description here

0 个答案:

没有答案