Постройте несколько строк с цветом на основе значения в Matlab

У меня есть матрица, состоящая из 5 столбцов. Первый и второй столбцы предназначены для x_start и y_start строки, третий и четвертый — для x_end и y_end. Пятая — концентрация загрязняющих веществ в этой линии — дает значение цвета моего графика. Я хочу построить график x_start и y_start с x_end и y_end для каждой строки и присвоить этой линии цвет на основе значения концентрации, которое варьируется в цвете от Cmin до Cmax в цветовой карте. Любая помощь?


person Mohamed Ismaiel    schedule 28.01.2015    source источник


Ответы (2)


Надеюсь, я правильно понял ваш вопрос. Вы можете попробовать следующий код. Предполагая, что ваши данные имеют следующий формат:

%    x_start y_start x_end y_end concentration
A = [0         0      1      1     0.3
     0         1      3      3     0.6
     3         1      6      2     1.2];

и вы используете одну из цветовых карт Matlab

cmap = colormap;

На основе минимальной и максимальной концентрации (первое и последнее значение цветовой карты) вы можете рассчитать индексы цветов с помощью

con_min = 0;
con_max = 2;
ind_c = round((size(cmap,1)-1)*A(:,5)/(con_max-con_min))+1

и перезапишите ColorOrder графика с помощью

figure;
set(gca,'ColorOrder',cmap(ind_c,:),'NextPlot','replacechildren');

и сделать сюжет с

plot([A(:,1) A(:,3)]',[A(:,2) A(:,4)]');

РЕДАКТИРОВАТЬ: чтобы отобразить правильную цветовую полосу, просто добавьте

colorbar                  % Display the colorbar
caxis([con_min con_max])  % Scale it to the correct min and max
person Nemesis    schedule 28.01.2015
comment
спасибо за ваш ответ, он работает хорошо, но мне нужно добавить цветовую полосу, дающую цветовой градиент от минимального до максимального, если вы можете помочь мне с этим, я буду признателен за вашу помощь. - person Mohamed Ismaiel; 29.01.2015

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

  1. Определите диапазон concentration of contaminant, означающий минимальное и максимальное значение.
  2. Решите, сколько различных графиков вы хотите, и разделите значения концентрации на ячейки.
  3. Постройте каждую строку, указав индекс ячейки, к которой принадлежит каждый образец.

Чтобы привести пример:

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

lines = '-:';
points = '<>^vdho';
color = 'rgbkm';

Итак, если образец попадает в 1-й бин (представьте себе i = 1), я сделаю что-то вроде:

i = lines(mod(i,length(lines))+1);
p = points(mod(i,length(points))+1);
c = color(mod(i,length(color))+1);
plot(..., sprintf('%s%s%s', l, p, c));

а так как у вас есть случайная комбинация линий, точек и цветов, вы получите различные линии 2 * 7 * 5 = 70. Конечно, вы можете изменить комбинации.

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

P.S. Я использую только эти цвета, потому что другие, такие как голубой ('c') или желтый ('y'), выглядят не очень хорошо.

person Eypros    schedule 28.01.2015