【问题标题】:why while zooming marker changes position?为什么缩放标记会改变位置?
【发布时间】:2012-07-25 20:31:55
【问题描述】:

我在上面绘制图形和标记。但是我看到了奇怪的行为 - 标记在缩放时改变了它的位置。我为此创建了video(请在观看时切换到全高清以便能够看到数字)

我的代码:

clear

fDevide = fopen('devideHistory.log');
data = textscan(fDevide, '%f:%f:%f:%f %f,%f %f,%f');
fclose(fDevide);

% hh:min:sec:millisec
secvec = [60*60 60 1 1e-3];
x = [data{1:4}] * secvec';

flvec = [1 1e-16];
y = [data{5:6}] * flvec';

xindays = x / (24*60*60);

plot(xindays, y);
set(gca, 'YTickLabel', get(gca,'YTick'))
datetick('x', 'HH:MM:SS');

hold on

fDeals = fopen('deals.log');
data = textscan(fDeals, '%f:%f:%f:%f %f,%f %f,%f %f,%f %f');
fclose(fDeals);

% hh:min:sec:millisec
secvec = [60*60 60 1 1e-3];
x = [data{1:4}] * secvec';

flvec = [1 1e-16];
y = [data{5:6}] * flvec';

xindays = x / (24*60*60);

plot(xindays, y, 'go','MarkerSize',6,'LineWidth',3);

源文件:devideHistory.logdeals.log

问题是为什么标记会改变它的位置。我希望它总是在同一个位置(来自文件 deal.log)

【问题讨论】:

  • 我没有发现问题。你说的是绿点吗?它们被绘制为数据点,因此它们与轴相关,而不是与框架相关。我在这里错过了什么吗?
  • @Bernhard 是的,我说的是绿点。我希望每个绿点都在准确的位置。例如10:02:00:072 0,0196422427423108,其中时间是 X,值是 Y。但它们在缩放时正在移动!有时他们在0,01964 有时在0,01963 有时在0,01962 有时在0,01961。同一个点!

标签: matlab plot zooming


【解决方案1】:

因为你设置了y轴标签

set(gca, 'YTickLabel', get(gca,'YTick'))

当您现在开始缩放时,刻度本身会发生变化,但标签不会。 您可以通过放大来注意到这一点,同时观察 y 轴的范围没有变化。



我认为您打算对上述 yticklabel 否决做的是提高这些 ytick 标签的准确性。但是您忘记让这些标签与实际值保持同步。

这个人:http://undocumentedmatlab.com/blog/setting-axes-tick-labels-format/ 花了一些时间使用回调使这个过程成为一个自动过程。

在文件交换中,同一个人有一个脚本可以为您自动完成:http://www.mathworks.com/matlabcentral/fileexchange/36254-ticklabelformat

所以你只需要打电话

ticklabelformat(gca,'y','%.6g')

或您想要的任何其他格式

【讨论】:

  • omg.. 我只是想知道在 matlab 这样专业的程序中做这些基本的事情有多难,而 matlab 正是为做这些事情而设计的。为什么 matlab 不能正确和友好地在轴上显示标签,为什么我应该做一些引入新错误的 hack...
  • @javapowered 实际上,您误用了 yticklabels,通常它们用于将单词放在那里,例如 'high','medium','low'。 matlab 应该如何知道您设置的标签与真实的刻度值相关联......您唯一可以责怪 matlab 的是,没有选项可以更改显示的刻度的默认精度;因此我给你的链接可以用另一种方式修复
  • The only thing you can blame matlab, is that there is no option to change the default precision of ticks shown。好吧,恕我直言,这是一个大问题。此外,我还必须使用datetick('x', 'HH:MM:SS');,然后我也会松开 x 标签。
  • 你有没有看过我提供的链接 (undocumentedmatlab.com/blog/setting-axes-tick-labels-format):一个简单的解决方案,可以自己修复。并且总是有功能请求(解释here
  • 好的,我正在阅读。它只是看起来不像我的问题听起来那么简单:) 但如果它可能有帮助的话。我会在 2-3 小时内阅读/尝试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-16
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
  • 2017-06-24
  • 2020-12-01
  • 1970-01-01
相关资源
最近更新 更多