Шейп-файлы окрашены в соответствии с соответствующими значениями
У меня следующая проблема. Приведены данные в таблице, состоящей из двух столбцов:
- колонка 1: номера для соответствующих географических зон (например, зона 11, которая обозначает Мюнхен)
- столбец 2: определенное значение в этой зоне (например, Пиковое ускорение грунта, PGA)
Я хотел бы отобразить эти зоны с их соответствующими значениями (например, PGA) на карте. Неравные значения должны быть представлены в неравных цветах. Например
- zone1 PGA=12 color=[1.0 1.0 0.0]
- Zone2 PGA=17 цвет = [1,0 0,9 0,5]
- Zone3 PGA=25 цвет =[0,6 1,0 1,0]
- zone1 PGA=12 color=[1.0 1.0 0.0]
Данные содержат около 200 зон, и в общей сложности около 160 различных зон и, следовательно, цветов. Что бы вы предложили установить для каждого значения определенный цвет (одинаковые значения = один и тот же цвет).
Спасибо заранее за вашу помощь. С наилучшими пожеланиями.
1 ответ
В вашем примере у зоны 1 есть PGA=12 в обоих случаях. Это всегда так, или у zone1 когда-либо был другой PGA? Этот ответ предполагает, что у него всегда будет одна и та же PGA.
myColorArray = jet(160); %assuming you have 160 unique colors/zones of the 200
Вот jet
ваша простая встроенная функция для создания красивой карты цветов Mx3
Если вы хотите рандомизировать это так, чтобы похожие цвета не были рядом друг с другом, вы можете сделать следующее:
myColorArray(randperm(160),:) = myColorArray;
Теперь я не знаю, является ли ваш фактический первый столбец для зон просто числом от 1 до 160, но если это так, вы можете просто использовать его в качестве индекса, чтобы соответствовать цветам.
FullColorArray(:,YourMatrix(:,1)) = myColorArray(:,YourMatrix(:,1));
Если это не так, вы можете использовать unique
Команда для создания индекса и работы с ним.
LimitedZoneMat = unique(YourMatrix(:,1));
Или, если я неправильно понял, и вы хотите, чтобы ваши цвета соответствовали значению PGA, вы можете просто использовать это как индекс.