Установите XTick оси y, чтобы у него были только целочисленные тики

#matlab

Вопрос:

У меня есть график с использованием двойной оси y yyaxis . Я хочу установить XTick только целочисленные значения, например, 1, 2, 3, 4, 5, 6, вместо 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6.

С нормальным plot я могу просто использовать:

 ax = gca;
ax.XTick = unique(round(ax.XTick));
 

для достижения этой цели.

Но это, похоже, не относится к yyaxis сюжету.

Пожалуйста, помогите!


Обновление: вот MWE, чтобы проиллюстрировать мою проблему:

 figure('Position', get(0, 'Screensize'));

max_iter = 100;
A_history = nan(1,max_iter); B_history = nan(1,max_iter);
for iter = 1 : max_iter
    yyaxis left;
    A_history(iter) = randn(1);
    plot(A_history(1:iter), '-ob', 'LineWidth', 0.9, 'MarkerSize', 4.5, 'MarkerFaceColor', 'b');
    ylabel('first yaxis');

    yyaxis right;
    B_history(iter) = randn(1);
    plot(B_history(1:iter), '-or', 'LineWidth', 0.6, 'MarkerSize', 3, 'MarkerFaceColor', 'r');
    ylabel('second yaxis');
    
%     ax = gca;
%     ax.XTick = unique(round(ax.XTick));
    pause(1);
end
 

Приведенный выше код создаст xticks из 0, 0.1, 0.2, 0.3, 0.4, …, 1 для 1-й итерации; x-количество 1, 1.1, 1.2, 1.3, 1.4, …, 2 для второй итерации, например.
Что я хочу, так это избавиться от всех нецелых значений (например, 0.1, … ,0.9, 1.1, … ,1.9) в xticks , просто оставьте целочисленные значения (например, 0,1 для 1-й итерации; 1,2 для второй итерации).

Я попытался добавить прокомментированные 2 строки кода. Но, к сожалению, они не дают мне ожидаемого результата. Что еще хуже, так это то, что xticks он будет становиться [0,1] все время…

Надеюсь, это прояснит описание проблемы.

Комментарии:

1. Можете ли вы опубликовать минимальный рабочий пример (с полным кодом yyaxis )?

2. @LuisMendo да, я добавил их в свой пост. Спасибо за напоминание!

3. Вероятно , одним из решений является добавление xticks(1:iter) , но это приведет к перекрытию xticks в конце концов, когда у нас будет большой max_iter , скажем, 1000. Я ищу лучшее решение, которое работает без беспорядка xticks , когда max_iter оно очень большое. Они xticks должны быть как-то саморегулируемыми.

Ответ №1:

На самом деле это 'XTickMode' свойство, которое устанавливается 'manual' , когда вы делаете:

 ax = gca;
ax.XTick = unique(round(ax.XTick));
 

Вы можете изменить это обратно 'auto' , чтобы оценить новые показатели, прежде чем пытаться сохранить только уникальные округленные значения. Т. е.

 ax = gca;
ax.XTickMode= 'auto';
ax.XTick = unique(round(ax.XTick));
 

Комментарии:

1. Большое вам спасибо за решение! Это то ax.XTickMode = 'auto' , что мне именно нужно!!