Рамка и координаты оси в картинке Matlab - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь построить картину в Matlab.Я хочу, чтобы поле графика было включено (box on), а координаты оси сообщались до установленного предела.Рассмотрим, например,

scatter(-0.5, 0.399, 'c','filled');
box on
axis([-0.504 -0.494 0.397 0.408 ])
legend('A')
xlabel('\gamma_0')
ylabel('\delta_0')
title('N=3') 

Теперь вы можете видеть, что на вертикальной оси последний тик вверху не нумеруется.Я не понимаю почему.Не могли бы вы помочь это исправить?

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

То, что происходит, похоже на проблему округления с плавающей запятой.Octave с любопытством делает то же самое.

>> axis([-0.504 -0.494 0.397 0.408 ])
>> t=get(gca,'ytick')
t =
   0.39600   0.39800   0.40000   0.40200   0.40400   0.40600   0.40800

>> l=get(gca,'ylim')
l =
   0.39700   0.40800

>> t(end)-l(end)
ans =
   5.5511e-17

Таким образом, отметка отметки 0,408 есть, но отметка отметки по-прежнему находится чуть выше предела оси, поэтому она не отображается.

Вы можете явно установить местоположения галочек, как предлагает Matteo , или явно задать пределы осей:

ylim([0.397,t(end)])

Обратите внимание, что здесь нужно использовать точное местоположениеотметка, t(end), а не константа 0.408, которая является другим значением.

0 голосов
/ 25 октября 2018

Вы можете установить галочки вручную, используя функцию set

scatter(-0.5, 0.399, 'c','filled');
box on
axis([-0.504 -0.494 0.397 0.408 ])
legend('A')
xlabel('\gamma_0')
ylabel('\delta_0')
title('N=3')
yTickDiff = diff(get(gca,'YTick'));
set(gca,'YTick',[0.397:yTickDiff(1):0.408])
0 голосов
/ 25 октября 2018

Я думаю, что это только проблема визуализации.Если вы хотите убедиться, что ваши лимиты показаны, вы можете принудительно установить значение тиков:

scatter(-0.5, 0.399, 'c','filled');
box on
axis([-0.504 -0.494 0.397 0.408 ])

xticks(linspace(-0.504, -0.494, 11)); % Set the ticks vector as a vector of 11 elements from -0.504 to -0.494
yticks(linspace(0.397, 0.408, 11));

legend('A')
xlabel('\gamma_0')
ylabel('\delta_0')
title('N=3') 

Image in my matlab

В своем комментарии вы указали, что хотите только трицифровой форматВ строке формата это '%1.3f'.Вы можете также принудительно отформатировать свои тики:

scatter(-0.5, 0.399, 'c','filled');
box on
axis([-0.504 -0.494 0.397 0.408 ])

xtickformat('%1.3f');
ytickformat('%1.3f');
xticks(linspace(-0.504, -0.494, 11)); 
yticks(linspace(0.397, 0.408, 11));

legend('A')
xlabel('\gamma_0')
ylabel('\delta_0')
title('N=3') 

это результат:

enter image description here

...