【问题标题】:How tick labels on one of the plot's axis can be multiplied in MATLAB?如何在 MATLAB 中将绘图轴之一上的刻度标签相乘?
【发布时间】:2014-12-03 23:31:22
【问题描述】:

我目前正在尝试在 Matlab 中的绘图上制作“漂亮”的轴。这些值是每 20 毫秒采集一次的样本。所以在 X 轴上,我想以毫秒为单位。我绘制数据的通用代码非常简单:

plot(1:size( data.matrix,1), data.matrix(:,1),'b');

到目前为止,我已经能够在该轴上正确显示样本编号: 代码:

set(gca,'XTick',(1:size(data.matrix,1))*20);

结果(a):

在给定的示例中,样本数等于 184,这使得:

time = 184 * 20ms = 3680ms

因为更改 XTick 值并没有太大的变化,所以我测试了 XTickLabel 属性:

代码:

set(gca,'XTickLabel',ceil(linspace(0,size(data.matrix,1)*20,10)));

结果(b):

代码:

set(gca,'XTickLabel',0:ceil((size(data.matrix,1)*20)/10):size(data.matrix,1)*20);

结果(c):

如您所见,结果并不是最糟糕的。但这不是我想要达到的目标。我的目标是拥有这样的价值观:

所以它只是首先绘制(结果 a)X 轴乘以 20。

谁能告诉我如何做到这一点?

【问题讨论】:

  • 你为什么要这样绘制而不是创建一个合适的时间向量?

标签: matlab plot


【解决方案1】:

当你使用时:

plot(1:size( data.matrix,1), data.matrix(:,1),'b');

第一个参数1:size( data.matrix,1) 创建一个表示数据点索引的连续整数向量。这有两个问题:

1) 您不需要指定它。仅使用 Y 数据调用的 Matlab plot 函数将自动创建此向量并使用它来绘制数据。

2) 这些索引表示您的数据在数组中的位置,它们没有物理意义(例如您的情况的“时间”)。

解决方案是创建一个适当的“时间”向量并将其作为第一个参数发送到绘图函数。这样,Matlab 将负责刻度管理,您不必调整手动 xtick 设置。

看看下面的例子中的两种方法,一切就清楚了:

%// build a simple index "X" vector (as you were doing)
x_index = 1:size(data.matrix,1) ;

%// build a properly scaled time vector
timeInterval = 20 ; % in milliseconds
x_time = ( 0:size(data.matrix,1)-1 ) * timeInterval ;

plot( x_index , data.matrix(:,1) ) %// this will do like in your example
plot( x_time  , data.matrix(:,1) ) %// this will do what you want

【讨论】:

    【解决方案2】:

    你不能不做吗?

    set(gca,'XTickLabel',(1:size(data.matrix,1))*20*20);
    

    【讨论】:

    • 完全忘记测试这个方法。非常感谢。
    猜你喜欢
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 2019-09-11
    • 2021-06-12
    • 2017-01-15
    相关资源
    最近更新 更多