Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 为什么缩放标记时会改变位置?_Matlab_Plot_Zooming - Fatal编程技术网

Matlab 为什么缩放标记时会改变位置?

Matlab 为什么缩放标记时会改变位置?,matlab,plot,zooming,Matlab,Plot,Zooming,我在上面绘制图表和标记。然而,我看到奇怪的行为-标记在缩放时改变了它的位置。我已经创建了这个(请在观看时切换到fullhd,以便能够看到数字) 我的代码: 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 = [d

我在上面绘制图表和标记。然而,我看到奇怪的行为-标记在缩放时改变了它的位置。我已经创建了这个(请在观看时切换到fullhd,以便能够看到数字)

我的代码:

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);
源文件:


问题是为什么标记会改变它的位置。我希望它总是在相同的位置(从文件deals.log)

这是因为您设置了y轴标签

set(gca, 'YTickLabel', get(gca,'YTick'))
现在开始缩放时,刻度本身会更改,但标签不会更改。 通过放大并同时观察y轴的范围没有改变,可以注意到这一点



我认为您打算对上述yticklabel进行否决,以提高这些ytick标签的准确性。但您忘记了让这些标签和实际值保持最新

这个家伙:花了一些时间,使用回调使这成为一个自动过程

在文件交换上,同一个人有一个脚本,可以为您实现自动化:

所以你只需要打电话

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

或者您想要的任何其他格式

我看不出有问题。你是说绿点吗?它们被绘制为数据点,因此它们中的大部分与轴相关,而不是与框架相关。我是不是遗漏了什么?@Bernhard是的,我说的是绿点。我希望每个绿点都在准确的位置。例如
10:02:00:072 00196422427423108
其中时间是X,值是Y。但它们在缩放时移动!有时在
001964
有时在
001963
有时在
001962
有时在
001961
处。同一个点!天啊。。我只是想知道在matlab这样的专业程序中做这些基本的事情有多困难,而matlab正是为做这些事情而设计的。为什么matlab不能在axis上以友好的方式正确显示标签,为什么我应该做一些引入新错误的黑客…@javapowered实际上,你误用了yticklabels,通常它们被用于放置单词,例如,
“高”、“中”、“低”
。matlab怎么知道你要设置的标签是链接到实际刻度值的。。。唯一可以归咎于matlab的是,没有任何选项可以更改显示的刻度的默认精度;因此,我给您提供了一个链接来修复另一种方法
,您唯一可以责怪matlab的是,没有任何选项可以更改所示刻度的默认精度
。嗯,这是一个大问题。我还必须使用
datetick('x','HH:MM:SS')之后我也松开了x标签。你有没有读过我提供的链接():一个自己修复的简单解决方案。而且总是有功能要求(解释)好的,我正在读。这看起来并不像我的问题听起来那么简单:)但如果它能帮上忙的话。我将在2-3小时内阅读/试用。