【问题标题】:Plot trace of figure绘制图形轨迹
【发布时间】:2017-01-18 10:04:16
【问题描述】:

我有 11 个二进制数据集,我想生成一个图形,其中包含数据集(全部为 297x258)的相应图形的轨迹,其中 y 轴和 x 轴乘以 (1.3*10 ^(-6))并分别标记为“Y轴(μm)”和“X轴(μm)”。 11 个数据集存储在一个单元格中(即data1{1},...data1{11})。此外,如果该图还可以使用相应数据集的名称标记每条轨迹,那将不胜感激(即data1{1},...)。

The binary data

预期输出示例:

【问题讨论】:

  • 和你之前的问题有区别吗?
  • 感谢您的提问。是的,它是不同的,但它确实使用相同的数据。我将添加预期输出的图像,希望能澄清问题。
  • 我还编辑了另一个问题,感谢您强调清晰度问题。非常感谢您的帮助。
  • 你能解释一下“数据集对应数字的轨迹”是什么吗?或者简单地说,您如何从data1{1,1} 到您所附图中的红线?
  • 您好,感谢您的提问。本质上,我想在 data1{1},...data1{11} 的相应图像的边缘周围绘制一条线。为了绘制图像并查看它的外观,我使用了: figure, imshow(no_cracks_crack1_map) 红线对应于 data1{1} 的边缘,同时也映射了 data1{2}...data1{11} 的边缘在图像上。这些数据集在 y 轴和 x 轴上有像素数,将这些轴乘以 (1.3*(10^(-6)) 会将这些轴从像素数更改为距离度量。

标签: matlab plot binary matlab-figure


【解决方案1】:

要绘制此图,我首先在所有数据集的每列中查找第一个非零元素,然后将它们相加以绘制彼此重叠的线。
最后,我将轴乘以您提供的转换常数(下面的raitio)并更改格式以满足您要求的样式:

data = reshape(cell2mat(data1),297,258,[]);
S = size(data);
fnzc = zeros(S([1 3])); % first non zero in column
for k = 1:S(3)
    csc = cumsum(data(:,:,k)>0,2); % on columns
    fnzc(:,k) = csc(:,end);
end
ratio = 1.3*(10^(-6));
ax = axes;
plot(ax,(S(1):-1:1)*ratio,cumsum(fnzc,2)*ratio)
ax.XAxis.TickLabelFormat = '%2d';
ax.XAxis.Exponent = -6;
ax.YAxis.TickLabelFormat = '%2d';
ax.YAxis.Exponent = -6;

结果是:

【讨论】:

  • 感谢您的解决方案。是否有可能改变轴,所以两者都是 (1x10^-6) 的顺序,即沿着 X 轴 50*20(-6), 1*10^(-6),...400*10^ (-6) 与 Y 轴相同。谢谢。
  • @a.kk 我已经将两个轴都乘以1.3*(10^(-6)),并且由于x轴和y轴的真实值分别是0:3000:3000,因此您可以按顺序获得轴10^-4 和 10^-3。如果你想得到更小的值,你可以乘以一个更小的数字(例如1.3*(10^(-8))),但它是关于值还是关于它们的显示方式?即,而不是轴上的 0.5 和角落中的小 x10^-4,在轴上放置标签 0.5*10^-6
  • 感谢您的回复。是的,这是关于它们的显示方式。感谢您更新答案。
  • @a.kk 所以现在可以了吗?或者您希望10^-6 显示在每个标签上?就个人而言,我认为这不是一个好主意。
  • 现在很棒。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
  • 2020-08-26
  • 2015-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多