Проблема или ошибка в xticklabel_rotate при рисовании карты температур и вращающихся меток xtick в Matlab - PullRequest
2 голосов
/ 21 января 2011

Я рисовал тепловые карты с метками в Matlab, в основном используя функции imagesc для рисования тепловой карты и xticklabel_rotate для вращения меток xtick.( см. Здесь для xticklabel_rotate ).Обычно это работает хорошо.Но сегодня я столкнулся с некоторой проблемой, которая, по-видимому, была вызвана xticklabel_rotate (или, возможно, дескриптором Matlab text , используемым xticklabel_rotate?)

Чтобы проиллюстрировать эту проблему, ниже я печатаю свой код ирезультаты, сгенерированные из кода (в основном, он случайным образом генерирует нормально распределенную матрицу данных, рисует тепловую карту для данных с использованием imagesc, рисует ее метки сверху и справа от оси, а затем вращает xticklabels):

function debug_xticklabelRotate(numX, numY, axisFontsize)
    data = randn(numY, numX);
    imagesc(data);
    colormap(jet);
    box on
    set(gca, 'ticklength', [0,0]);
    set(gca, 'xminortick', 'off', 'yminortick', 'off');
    set(gca, 'XAxisLocation', 'top');
    set(gca, 'YAxisLocation', 'right');
    set(gca,'FontSize', axisFontsize);
    axis image
    set(gca, 'Xtick', 1 : numX);
    htext = xticklabel_rotate([],90, [], 'fontsize', axisFontsize);
    set(gca, 'YTick', 1 : numY);
end

Задача 1 : я вызвал вышеупомянутую функцию с параметрами как

debug_xticklabelRotate(40, 100, .5);       

, чтобы получить выходное изображение ниже (для экономии места я обрезал изображение ипоказывать только верхние несколько строк):

http://i52.tinypic.com/smazoj.jpg

Обратите внимание, что ошибка заключается в том, что в результате вызова xticklabel_rotate ни правая часть поля рисунка, ни символы yticklabels не отображаются.нарисован.

Проблема 2 : Когда я вызываю вышеупомянутую функцию с параметрами как

debug_xticklabelRotate(40, 200, .5);  % only numY is changed from 100 to 200

, выводимое изображение показано ниже (снова, чтобы сэкономить место, я обрезал изображениеи показывают только верхние несколько строк):

http://i55.tinypic.com/317grdd.png

По сравнению с вызовом с numY = 100 на этом рисунке показаны как изображение данных, так и метки.Однако, пожалуйста, обратите внимание на две проблемы здесь.Во-первых, размер шрифта xticklabel отличается от значения yticklabel (axisFontsize).Во-вторых, метки xtick не выровнены хорошо по столбцам (xticks): некоторые метки ближе, а некоторые - дальше.

Обратите внимание, что если я удалю вызов функции xticklable_rotate в моей функции debug_xticklabelRotate, все эти упомянутые проблемы исчезнут (за исключением того, что теперь xticklabel не вращается).

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

Ответы [ 2 ]

1 голос
/ 31 марта 2011

Как автор xticklabel_rotate, я пытался воспроизвести упомянутые ошибки с небольшим успехом.Я обнаружил проблему с изменением положения оси, когда y-метки справа, и я рассмотрю ее.Я не получаю таких заметных смещений, как вы показали, когда я запускаю одни и те же примеры, поэтому я не уверен, что ответитьУбедитесь, что эти проблемы существуют, когда вы печатаете рисунок, и это не простая проблема отображения.

Текстовые поля создаются в позициях тиков, в единицах данных.Они выровнены по центру, больше ничего не поделаешь, но я открыт для предложений.

PS.Я согласен, было бы неплохо, если бы эта функция была присуща MatLab.Если бы это было так, мне бы не пришлось над этим работать.

0 голосов
/ 22 января 2011

Если вы закомментируете строку:

set(gca, 'YAxisLocation', 'right')

тогда должно работать как положено. Кажется, что функция XTICKLABEL_ROTATE не поддерживает правые y-метки. Вам следует связаться с автором и сообщить ему о возможной ошибке ...

...