几个数字信号的 Matlab 绘图

标签 matlab graph plot

我正在尝试找到一种方法来很好地绘制数字信号的测量数据。

所以我有从安捷伦示波器导出的 csv 和 mat 文件形式的数据。我不只是拍摄示波器屏幕的屏幕截图的原因是我需要更加灵活(用一组数据绘制几张图,只显示一些线条)。此外,我需要能够在一两个月内更改绘图,因此我唯一的选择是使用计算机根据数据创建绘图。

我想要实现的目标类似于这张图片: Goal 该图片中唯一缺少的是带有 0 和 1 行的 y 轴。

我的第一次尝试是用 Matlab 制作类似的图。这是我得到的: What I have so far

绝对缺少的是信号名称紧邻实际线路以及 y 轴上的 0 和 1 刻度。

我什至不确定 Matlab 是否是正确的工具,我希望你们能给我一些关于如何制作绘图的提示/解决方案:-)

这是我的 Matlab 代码:

clear;
close all;
clc;

MD.RAW = load('Daten/UVLOT1 debounced 0.mat');  % get MeasurementData

MD.N(1) = {'INIT\_DONE'};
MD.N(2) = {'CONF\_DONE'};
MD.N(3) = {'NSDN'};
MD.N(4) = {'NRST'};
MD.N(5) = {'1V2GD'};
MD.N(6) = {'2V5GD'};
MD.N(7) = {'3V3GD'};
MD.N(8) = {'5VGD'};
MD.N(9) = {'NERR'};
MD.N(10) = {'PGD'};
MD.N(11) = {'FGD'};
MD.N(12) = {'IGAGD'};
MD.N(13) = {'GT1'};
MD.N(14) = {'NERRA'};
MD.N(15) = {'GT1D'};
MD.N(16) = {'GB1D'};

% concat vectors into one matrix
MD.D = [MD.RAW.Trace_D0, MD.RAW.Trace_D1(:,2), MD.RAW.Trace_D2(:,2), MD.RAW.Trace_D3(:,2), ...
    MD.RAW.Trace_D4(:,2), MD.RAW.Trace_D5(:,2), MD.RAW.Trace_D6(:,2), MD.RAW.Trace_D7(:,2), ...
     MD.RAW.Trace_D8(:,2), MD.RAW.Trace_D9(:,2), MD.RAW.Trace_D10(:,2), MD.RAW.Trace_D11(:,2), ...
      MD.RAW.Trace_D12(:,2), MD.RAW.Trace_D13(:,2), MD.RAW.Trace_D14(:,2), MD.RAW.Trace_D15(:,2)];

cm = hsv(size(MD.D,2)); % make colormap for plot

figure;
hold on;

% change timebase to ns
MD.D(:,1) = MD.D(:,1) * 1e9;

% plot lines
for i=2:1:size(MD.D,2)
    plot(MD.D(:,1), MD.D(:,i)+(i-2)*1.5, 'color', cm(i-1,:));
end

hold off;

legend(MD.N, 'Location', 'EastOutside');
xlabel('Zeit [ns]');        % x axis label
title('Messwerte');         % title
set(gca, 'ytick', []);      % hide y axis

谢谢各位的帮助! 丹

编辑: 这是我基本上想要的图片。我通过文本添加了信号名称,现在唯一缺少的是 0、1 刻度。它们对于 init done 信号来说是正确的。现在我只需要重复它们而不是 y 轴上的其他数字(抱歉,有点难以解释:-) Almost what I want

最佳答案

正如我对这个问题的评论中所写的那样。为了将名称附加到每个信号,我建议搜索 documentation of how to append text to graph 。在那里你可以找到许多不同的方法来做到这一点。您可以更改位置(上方、下方)和数据的确切点。作为示例,您可以使用:

text(x_data, y_data, Var_Name,'VerticalAlignment','top');

此处 (x_data, y_data) 是您要附加文本的数据点,Var_Name 是您要附加的名称。

关于如何获取每个信号包含 01 值的 y 数据的第二个问题。我会通过创建信号的方式来做到这一点,即第一个信号的值为 01。下一个信号的绘制高度约为 2。因此它从 2 更改为 3 等等。这样,当您打开 y 轴(网格打开)时,您将获得每个整数的值(显然,如果您希望两个信号之间的距离更短,您可以将其更改为其他值)。然后您可以使用 documentation of axes 重新标记 y 轴(检查最后一部分,因为文档很长)和 set() 函数:

set(gca, 'YTick',0:1:last_entry, 'YTickLabel',new_y_label(0:1:last_entry))

这里last_entry2*No_Signals-1new_y_label是一个由0,1,0构成的数组, 1,0,...

关于几个数字信号的 Matlab 绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24360865/

相关文章:

matlab - 将图形保存为 eps 文件时,Matlab 会切断颜色图标签

python - networkx:作为计算值的边权重

java - 图传递性 Java

R 绘图 : row names as labels

matlab - 在matlab中检查没有for循环的数组中的成员资格

matlab - 通过用一个 2D 矩阵索引另一个 2D 矩阵来矢量化创建 3D 矩阵

MATLAB - 根据条件编辑矩阵的一部分

mysql - 如何在单个图表上从两个不同的 MySQL 表生成结果

r - 使用 ggplot 与使用基本 R 函数时的图形结果不同?

unix - 来自两个文件的gnuplot绘图数据:在一个x坐标中,在另一个y中