#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'
, что мне именно нужно!!