Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Приложения с GUI и дескрипторная графика.doc
Скачиваний:
49
Добавлен:
01.05.2014
Размер:
699.39 Кб
Скачать

5.7.6. Вывод многострочного текста.

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

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

С использованием массива ячеек это можно сделать следующим образом (для создания массива ячеек применяются фигурные скобки):

figure

axes

str = {'first line'; 'second line'; 'third line'};

hT = text(0.5, 0.5, str, 'FontSize', 20)

Разумеется, можно было не создавать специальной переменной str, а сразу использовать массив ячеек при создании текстового ообъекта:

hT = text(0.5, 0.5, {'first line'; 'second line'; 'third line'}, 'FontSize', 20)

Вместо массива ячеек можно задействовать массив строк, который создается из отдельных строк или строковых переменных при помощи функции char (она автоматически добавляет в конец каждой строки пробелы так, чтобы образующие массив строки оказались равной длины):

figure

axes

str = char('first line', 'second line', 'third line')

hT = text(0.5, 0.5, str, 'FontSize', 20)

В двух примерах, приведенных выше, создавался один текстовый объект, указатель на который записывался в переменную hT. Если в качестве координат текста указать векторы, длина которых совпадает с числом строк многострочного текста, то получится столько текстовых объектов, сколько строк в тексте:

figure

axes

str = {'first text object'; 'second text object'; 'third text object'}

hTT = text([0.1 0.3 0.5], [0.2 0.4 0.6], str, 'FontSize', 20)

Теперь hTT является вектором указателей на три текстовых объекта, свойства которых можно изменять независимо, например:

set(hTT(1), 'Color', 'r', 'FontWeight', 'bold')

set(hTT(2), 'BackgroundColor', 'y', 'Color','b')

set(hTT(3), 'EdgeColor', 'm', 'LineWidth',5)

Аналогичным образом можно использовать массив строк для создания нескольких текстовых объектов при помощи одной функции text. Кроме того, допускается использование символа вертикальной черты | в качестве разделителя строк. Т.е. в приведенном выше примере вместо str = {'first text object'; 'second text object'; 'third text object'} можно было написать:

str = char('first text object','second text object', 'third text object')

или

str = 'first text object|second text object|third text object'

и результат был бы тем же самым.

Приведем пример, в котором на оси выводится матрица

следующим образом:

Сначала создается двумерный массив M, в который заносятся заданные элементы матрицы. Затем при помощи функции size в переменные m и n записывается число его строк и столбцов. Далее в графическом окне располагаются оси со следующими свойствами: пределы по оси абсцисс от 0 до n+1, по оси ординат - от 0 до m+1, подписи осей совпадают с номерами строк и столбцов, ось абсцисс расположена сверху, а ось ординат направлена вниз. Далее в цикле проходим по столбцам матрицы. На каждом шаге цикла текущий столбец числовых значений матрицы преобразуем в массив строк функцией num2str и создаем столько текстовых объектов, сколько элементов в столбце (т.е. столько, сколько строк в матрице). Массив строк указываем в функции text для создания текстовых объектов и записываем указатели на полученные объекты в соответствующие позиции двумерного массива указателей hT.

M = [1 2 3 4; 5 6 7 8; 9 10 11 12]

[m, n] = size(M);

figure

axes('XLim', [0 n+1], 'YLim', [0 m+1],...

'XTick', 1:n, 'YTick', 1:m,...

'YDir', 'reverse', 'XAxisLocation', 'top')

hT = zeros(m, n)

for j=1:n

C = M(:, j)

hT(:, j) = text(j*ones(1, m), 1:m, num2str(C),...

'HorizontalAlignment', 'center', 'FontSize', 30)

end

В результате на оси выводится матрица и в двумерный массив hT заносятся указатели на все созданные текстовые объекты. Этот массив можно использовать для дальнейшей работы с ними. Например, если требуется изменить цвет элементов второй строки на красный, то достаточно выполнить:

set(hT(2,:), 'Color', 'r')

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

set(hT(M>7), 'Color', 'r')

set(hT(M>=3&M<=7), 'Color', 'g')

set(hT(M<3), 'Color', 'b')