【问题标题】:MATLAB axes colors change when writing a GIF编写 GIF 时,MATLAB 坐标区颜色会发生变化
【发布时间】:2016-10-22 05:36:39
【问题描述】:

相关信息:MATLAB R2015b、Mac

我目前正在尝试从我拍摄的一系列数据集(txt 文件)中编写一个 GIF。我编写 GIF 文件没有问题,但是,当播放(在 PowerPoint 中)或在 OS X Finder 中预览时,轴标签的颜色会发生变化。除了颜色变化之外,我还收到以下警告:

警告:图像数据包含超出范围的值。超出范围的值将被赋予最接近的有效值。

目前,我抓取目录中的所有数据文件,绘制它们,抓取每一帧,然后将它们放入 GIF 中。这是我的代码:

%Create MATLAB movie from plots
clearvars
%addpath('C:\Users\ucmuser\Documents\MATLAB')
filename='cooldown_movie.gif';
ext_in='txt';
[~,listing]=f_search(ext_in);
[r,~]=size(listing);
listing=natsortfiles(listing);
F=figure;

%r=20 is used for quick debugging (original is 460 files).
r=20;
% y=linspace(1,2*pi,100);
% x=linspace(1,100,100);
%C(1,1,1,r)=0;
for i=1:r
        A=dlmread(listing{i});
        listing{i}=strrep(listing{i},'_','\_');
        x=A(1,:); %X Array
        y=A(2,:); %Y Array
            plot(x./1E9,y.*1E3,'-','LineWidth',1.2,...
                'Color',[0.8500 0.3250 0.0980]);
   grid off
    xlabel('Frequency (GHz)','FontSize',18,'FontWeight','bold')
    ylabel('Voltage (mV)','FontSize',18,'FontWeight','bold')
    title('Cooldown Movie','FontSize',24,'FontWeight','bold')
    G(i)=getframe(gcf);
    drawnow
    frame = G(i);
%    im = frame2im(frame);
    [C(:,:,1,i),map] = rgb2ind(frame.cdata,256,'nodither');
%     if r == 1;
%         imwrite(C,map,filename,'gif','LoopCount',Inf,'DelayTime',0);
%     else
%         imwrite(C,map,filename,'gif','WriteMode','append','DelayTime',0);
%     end
end
imwrite(C,map,filename,'gif','LoopCount',Inf,'DelayTime',0);

示例图像如下所示。坐标轴标签的颜色会发生变化。如果我打开网格,随着网格灰度强度的变化,效果会更加明显。我试过设置限制,效果仍然存在。

【问题讨论】:

  • 这可能是由于 gif 的处理方法。您是否考虑过手动指定xlimylim,以便轴不会不断变化。这应该会清理您的视频。
  • 是的,我试过设置限制,但没有多大帮助。
  • 如果我设置了轴限制,我会得到一个奇怪的背景闪烁颜色效果。
  • 我不会使用 MATLAB 写入 GIF,而是让实际的 MATLAB 图形动画并使用像 LICEcap 这样的捕获工具为您完成。尝试这样做,而不是使用 MATLAB 语法将 GIF 写入文件,看看它是如何为您工作的。如果有帮助,我从未编写过 MATLAB 代码来从多个 MATLAB 绘图创建动画 GIF。我只是让 LICEcap 为我捕捉图形窗口。例如,请参阅这篇文章:stackoverflow.com/questions/29948697/…
  • 是的,有那个选项。缺点是 LICEcap 以 MATLAB 绘制图形的速度记录,这恰好比 GIF 文件慢得多,图像之间的延迟为 0 秒。我想我仍然可以减少 LICEcap 中的帧数以提高录制后的播放速度。

标签: matlab matplotlib colors gif axes


【解决方案1】:

我暂时找到了一个解决方案,虽然我不太确定它为什么有效。我开始浏览图形属性并关闭 GraphicsSmoothing 属性(在“for 循环”之前输入F=figure;F.GraphicsSmoothing='off';)。这似乎解决了问题并清除了原来的 out of range 错误。

“打开”GraphicsSmoothing 属性并浏览前 20 个数据文件后,我通过max(max(max(C))) 获得的最大索引颜色值为 22。在“关闭”GraphicsSmoothing 的情况下执行相同的代码会产生最大值 4。

我附上两张图片,显示打开和关闭 GraphicsSMoothing 时的极端色差。

GraphicsSmoothing turned On (default)

GraphicsSmoothing turned Off

如果有人知道为什么会这样,我将不胜感激。

更新:我尝试将此解决方案与grid on 一起使用,并且背景边框变为橙色。我对整个问题感到困惑。

【讨论】:

    猜你喜欢
    • 2014-09-04
    • 2017-10-05
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 2012-07-02
    • 1970-01-01
    相关资源
    最近更新 更多