У меня есть матрица, состоящая из 5 столбцов. Первый и второй столбцы предназначены для x_start и y_start строки, третий и четвертый — для x_end и y_end. Пятая — концентрация загрязняющих веществ в этой линии — дает значение цвета моего графика. Я хочу построить график x_start и y_start с x_end и y_end для каждой строки и присвоить этой линии цвет на основе значения концентрации, которое варьируется в цвете от Cmin до Cmax в цветовой карте. Любая помощь?
Постройте несколько строк с цветом на основе значения в Matlab
Ответы (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
Мой подход, который не полностью автоматизирован (если вы ожидаете чего-то подобного), будет выглядеть следующим образом:
- Определите диапазон
concentration of contaminant
, означающий минимальное и максимальное значение. - Решите, сколько различных графиков вы хотите, и разделите значения концентрации на ячейки.
- Постройте каждую строку, указав индекс ячейки, к которой принадлежит каждый образец.
Чтобы привести пример:
Обычно я предпочитаю комбинированную схему с различным стилем линий, стилем точек и цветом.
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'), выглядят не очень хорошо.