Скаттер с отрезками - PullRequest
0 голосов
/ 01 мая 2020

Мне очень нравится способность scatter() автоматически окрашивать точки на основе некоторого вектора значений, я просто хочу добавить цветные точки между точками.

Рассматриваемый график имеет время по оси X, число Монте-Карло по оси Y, а затем некоторое измеренное значение в качестве цветового вектора (например, количество автомобилей, видимых в видеокадре).

По сути, каждая точка является обновлением в системе. Таким образом, вызов scatter(time,monte_carlo_number,[],color_vec) отображает точки, в которых происходит обновление в системе, с цветом, представляющим некоторое значение. Это здорово, но я хотел бы добавить отрезки, соединяющие эти точки, каждый отрезок соответствует цвету, указанному в color_ve c.

Basi c рабочий пример

% Create example data
data = table();
data.time        = randsample(1:100, 1000, true)';
data.mc          = randsample(1:50, 1000, true)'; % actual monte-carlo run number labels are sorted
data.color_value = randsample(1:10, 1000, true)';


% Create the scatter plot
scatter(data.time, data.mc, [] , data.color_value, 'filled')
colorbar('Ticks', unique(data.color_value))
% Always label your axes
xlabel('Time (s)')
ylabel('Monte-Carlo Run Number')

Ниже приведен скриншот того, что может создать этот код. Если color_value - это количество автомобилей, видимых в видеокадре, мы можем видеть каждый раз, когда это значение обновляется через точки. Тем не менее, людям легче читать этот график, если бы были линии, соединяющие каждую точку с другой с правильным цветом. Это демонстрирует зрителю, что это значение сохраняется во времени до следующего обновления. enter image description here

1 Ответ

0 голосов
/ 04 мая 2020

Как то так? Я изменил количество сэмплов до 100, и это уже довольно беспорядочно, так что я не думаю, что это поможет зрителю понять, что намечается.

% Create example data
data = table();
np = 100;
data.time        = randsample(1:100, np, true)';
data.mc          = randsample(1:50, np, true)'; % actual monte-carlo run number labels are sorted
data.color_value = randsample(1:10, np, true)';


vals = unique(data.color_value).';
cmap = parula(numel(vals));

colors = [];
for k = 1:numel(vals)
    ind = find(data.color_value == vals(k));
    data_sel{k} = sortrows(data(ind,:));
    colors(k,:) = cmap(k,:);
end


figure(1); clf;
% Create the scatter plot
scatter(data.time, data.mc, [] , data.color_value, 'filled')
hold on
for k = 1:numel(vals)
    plot(data_sel{k}.time, data_sel{k}.mc, 'Color',colors(k,:))
end
colorbar('Ticks', unique(data.color_value))
% Always label your axes
xlabel('Time (s)')
ylabel('Monte-Carlo Run Number')

enter image description here

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