【问题标题】:Visualizing 2d data in a certain way以某种方式可视化二维数据
【发布时间】:2018-06-23 19:28:51
【问题描述】:

我需要从包含 349 行和 4007 列的一些 2d 数据中制作图像。在下面的尝试中,我只使用了前 300 列。

clf;
B = importdata('beta.txt');
Bd = detrend(B(:,1:300),0); % remove the zero offset
d  = 10000;                 % vertical spacing
Bs = Bd;                    % copy of the original data

initOffset = Bs(1,1);

for i = 1 : size(Bs,2) % loop adding constant to each column
    Bs(:,i) = Bs(:,i) - initOffset + (i-1) * d ; %subtract the offset from each
end    

我想要的图像看起来像这样:

但这是我使用 plot(Bs, 'k'); 制作时得到的图像:

我认为图像需要经过标准化到 0-255 并使用灰度创建(其他建议表示赞赏)。这是来自文本文件的示例数据:

4855    4641    4891    4791    4812    4812    4927    4833    4768    4832
4827    4766    4862    4745    4767    4785    4867    4840    4918    4735
6676    5075    6903    6879    6697    6084    4896    4758    5658    5546
7340    6829    7678    7753    7263    6726    7386    6726    5798    6168
6176    6237    6708    6737    6316    5943    6320    5962    5706    5817
12014   10467   10915   10914   10124   10642   10379   10700   10410   10055
8251    7538    7641    7619    7269    7658    7477    7579    7376    7201
6456    6105    6132    6136    5921    6227    6074    6011    6009    5932
5519    5287    5330    5376    5255    5237    5296    5287    5187    5138
4904    4784    4835    4855    4794    4758    4841    4756    4767    4772
4553    4527    4472    4592    4469    4455    4470    4480    4394    4340
4298    4323    4291    4293    4221    4238    4284    4213    4125    4094
4167    3957    4089    3991    3938    3907    3986    3875    3878    3923
3789    3721    3777    3777    3643    3596    3672    3664    3725    3652
3736    4615    3639    3582    3638    3550    3411    3302    3427    3444
4413    5286    4248    3998    4370    4199    3821    3750    3738    4279
5994    6896    6134    5548    6102    6161    5242    5356    5361    6063
8506    9020    7841    8060    8663    8941    7497    7815    7793    8710
12347   12302   10639   11151   12533   12478   11253   11312   11198   12287
18859   18175   15035   15938   18358   18160   15989   15665   15683   18506
27106   26261   22613   24069   27015   27114   23307   23712   23854   23966
32767   32601   32767   32767   32767   32767   32767   32767   32767   32712
32767   32767   32767   32767   32767   32767   32767   32767   32767   32767
32767   32767   32767   32767   32767   32767   32767   32767   32767   32767
32767   32767   32767   32767   32767   32767   32767   32767   32767   32767
32767   32767   32767   32767   32767   32767   32767   32767   32767   32767
32767   32767   32767   32767   32767   32767   32767   32767   32767   32767
26416   26459   32767   32767   26308   26945   32767   19586   32767   32767
6523    6900    13327   16665   6616    6477    12799   -8608   13109   15553
-14233  -14011  -8554   -5649   -13956  -13858  -8707   -21817  -8875   -6927
-28128  -26784  -26157  -24055  -27875  -28374  -26639  -30353  -27054  -25518
-28775  -27905  -30348  -26285  -28915  -29066  -32768  -32396  -32714  -30599
-20635  -19776  -21144  -21548  -22107  -22759  -26599  -27908  -24334  -22628

【问题讨论】:

  • 您确定需要使用情节吗?看起来你想要的输出更容易使用“image”或“imagesc”并使用灰度颜色图
  • 我怎样才能得到带有灰度颜色图的图像?
  • 一个选项是 imagesc(data);颜色图(灰色);查看文档以获取更多选项mathworks.com/help/matlab/ref/colormap.htmlmathworks.com/help/matlab/ref/imagesc.html
  • 那么您到底遇到了什么困难?规范化数据?设置灰度颜色图?选择正确的绘图功能?被告知您的轴已切换?很高兴您提供了一个数据样本(尽管说它是int16 会更容易),但是我们中没有人能够用这么小的数据子集重现这些图。您可能希望将文本文件上传到某处或使用可以包含负值的图像格式(我相信 tiff 就是这种格式)。我会等待更多信息。
  • @Dev-iL 这是包含所有数据的文本文件 dropbox.com/s/4zfzpz37tbd6tzm/beta.txt?dl=0 。我很难制作图像,我想特别是设置灰度颜色图。我看过 surf 和 imagesc 函数,后者似乎主要处理 3d 数据。顺便说一句,感谢您的评论!

标签: matlab image-processing plot visualization matlab-figure


【解决方案1】:

首先,如果您使用的是 MATLAB,您不妨将数据存储为图像而不是文本 - 这既更有意义也更紧凑。您可以使用以下代码将其保存为 16 位 png

B = importdata('beta.txt');
imwrite(uint16(B - double(intmin('int16'))), 'beta.png');

结果如下:

您甚至可以通过直接从该网页加载图片来验证没有信息丢失:

V = imread('https://i.stack.imgur.com/g4NUA.png');
assert(isequal(B, double(V) + double(intmin('int16'))));

继续您的实际问题,349 维度似乎对应于“时间”,这意味着它应该是 y 轴。由于值应该从上到下递增,所以不需要axis 命令。因此,您真正需要做的只是显示图像,just as Noel said

figure(); imagesc(B); colormap('gray');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 2015-11-15
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 2014-09-21
    相关资源
    最近更新 更多