Matlab 通过原点绘图,而不管只有负数据还是只有正数据
Matlab plotting through origin regardless of only negative or only positive data
这个问题应该很容易回答,但我很惊讶它没有被描述:
我有可变数据,通常当我简单地绘制时,我会在 y 轴上得到一个特写(x 轴是时间并且总是从零开始)。所以我得到 16-17 的 y 值,但无处可见零。我知道你可以给 matlab 一个 YLim 值,但有时因为我的数据是可变的,所以我得到的 y 范围是 -50-100。如果我之前指定 YLim 是 [0 20] 我根本不会看到它,这不是我想要的。我只是一直想用我的数据绘制原点,我该怎么做(没有像 [-1000 1000] 这样的严格间隔,因为有时我有 -0,01-0,001 的 y 值并且看不到它)?有想法请帮忙!
谢谢!
更新 1:完美解决!
后续问题:
有一件事我没有提到:我需要为所有 18 个子图执行此操作。我怎样才能避免硬编码呢?
手动修改坐标轴大小很方便:
x = 1:10; %/ example x
y = 5 + rand(1,10); %// example y. Values between 5 and 6
plot(x,y) %// do the plot normally
ax = axis; %// get axis size
ax(3) = min(ax(3),0); %// if the y-axis lower limit is positive, make it 0
axis(ax) %// apply new axis size values
这似乎也有效:只需使用
plot([x NaN],[y 0])
也就是说,包括一个 x
值设置为 NaN
且 y
值设置为 0
的点。该点未绘制(因为 NaN
值)但它强制 y
轴延伸到 0
.
自动执行此操作的一种方法是使用:
ylim([min([y 0]) max([y,0])])
这样,如果 0
不在 y
范围内,它将在 0
开始或停止
或更好,如果你想保留 matlab 提供的舍入值(例如在 [0,6] 上而不是 [0,5.872] 上绘制),首先用 plot(x,y)
绘制你的数据,然后更改如果需要,ylim 值为 0:
ylim([min([ylim 0]) max([ylim 0])])
这个问题应该很容易回答,但我很惊讶它没有被描述:
我有可变数据,通常当我简单地绘制时,我会在 y 轴上得到一个特写(x 轴是时间并且总是从零开始)。所以我得到 16-17 的 y 值,但无处可见零。我知道你可以给 matlab 一个 YLim 值,但有时因为我的数据是可变的,所以我得到的 y 范围是 -50-100。如果我之前指定 YLim 是 [0 20] 我根本不会看到它,这不是我想要的。我只是一直想用我的数据绘制原点,我该怎么做(没有像 [-1000 1000] 这样的严格间隔,因为有时我有 -0,01-0,001 的 y 值并且看不到它)?有想法请帮忙!
谢谢!
更新 1:完美解决!
后续问题:
有一件事我没有提到:我需要为所有 18 个子图执行此操作。我怎样才能避免硬编码呢?
手动修改坐标轴大小很方便:
x = 1:10; %/ example x
y = 5 + rand(1,10); %// example y. Values between 5 and 6
plot(x,y) %// do the plot normally
ax = axis; %// get axis size
ax(3) = min(ax(3),0); %// if the y-axis lower limit is positive, make it 0
axis(ax) %// apply new axis size values
这似乎也有效:只需使用
plot([x NaN],[y 0])
也就是说,包括一个 x
值设置为 NaN
且 y
值设置为 0
的点。该点未绘制(因为 NaN
值)但它强制 y
轴延伸到 0
.
自动执行此操作的一种方法是使用:
ylim([min([y 0]) max([y,0])])
这样,如果 0
不在 y
0
开始或停止
或更好,如果你想保留 matlab 提供的舍入值(例如在 [0,6] 上而不是 [0,5.872] 上绘制),首先用 plot(x,y)
绘制你的数据,然后更改如果需要,ylim 值为 0:
ylim([min([ylim 0]) max([ylim 0])])