How To plot the space time diagram of an intersection for a traffic signal in matlab ?

4 次查看(过去 30 天)
Hello , I am trying to plot a similar figure as in the attached photo . I am trying to plot the space time diagram for a traffic signal in an intersection。the figure illustrates the phase timing of a traffic signal that changes between red and green. the challenge is that the signal changes between the red and the green light and I have to make the width of each color match the time duration of the signal corresponding to it

采纳的回答

Yatharth
Yatharth 2023-12-4
编辑:Yatharth 2023-12-4
Hi Mohamed,
I understand that you want to plot the space time diagram for a traffic signal in an intersection.
You can use MATLAB’s “rectangle” function to plot the rectangles of the exact width of the time duration of the signal.
Here is the link to the documentation for “rectangle” function. https://www.mathworks.com/help/matlab/ref/rectangle.html
I am attaching two examples combining both you can achieve your desired output.
Example 1 Multiple Intersections on Y axis
% Define signal phase durations for each intersection
redDuration = 20; % in seconds
greenDuration = 40; % in seconds
% Create a figure
figure;
% Define the intersection names
intersections = {'Intersection 1', 'Intersection 2', 'Intersection 3', 'Intersection 4'};
w = 0.2;
h = w/2;
% Plot the red and green signal phases for each intersection
for i = 1:4
% Plot the red signal phase
rectangle('Position', [0, i-h, redDuration, w], 'FaceColor', 'r');
hold on;
% Plot the green signal phase
rectangle('Position', [redDuration, i-h, greenDuration, w], 'FaceColor', 'g');
hold on;
end
% Customize the plot
xlabel('Time (seconds)');
ylabel('Intersection');
title('Traffic Signal Space-Time Diagram');
ylim([0.5 4.5]);
yticks([1 2 3 4]);
yticklabels(intersections);
grid on
Note: Here you can adjust the variables "redDuration" , "greenDuration" according to your use case/ algorithm for each intersection.
Example 2 Multiple Signals on X axis
% Define signal phase durations for each intersection
redDuration = 20; % in seconds
greenDuration = 30; % in seconds
% Create a figure
figure;
w = 0.2;
h = w/2;
% Plot the red signal phase for each intersection
for i = 1:4
rectangle('Position', [(i-1)*50, 0.5-h, redDuration, w], 'FaceColor', 'r');
hold on;
end
% Plot the green signal phase for each intersection
for i = 1:4
rectangle('Position', [(i-1)*50 + redDuration, 0.5-h, greenDuration, w], 'FaceColor', 'g');
hold on;
end
% Customize the plot
xlabel('Time (seconds)');
ylabel('Intersection');
title('Traffic Signal Space-Time Diagram');
ylim([0 5]);
yticks([0.5 1.5 2.5 3.5 4.5]);
yticklabels({'Intersection 1', 'Intersection 2', 'Intersection 3', 'Intersection 4'});
grid on
You can adjust the expression "(i-1)*50" and utilize your own specific values from an Array. By combining these two methods, you can generate the intended plot
I hope this helps!

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Graphics Objects 的更多信息

产品


版本

R2023b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by