How can I create a patch between two graphs?

2 views (last 30 days)
How can I create a patch between two graphs ?
clear all;clc;
s = [1 2 3 4];
t = [2 3 4 5];
x = [0 1 2 2 4];
y = [0 0 0 0 0];
z = [1 1 2 3 3];
G = graph(s,t);
G.Nodes.X = x'; G.Nodes.Y = y'; G.Nodes.Z = z';
hold on
plot(G,'XData',G.Nodes.X,'YData',G.Nodes.Y + 2,'ZData',G.Nodes.Z)
plot(G,'XData',G.Nodes.X,'YData',G.Nodes.Y,'ZData',G.Nodes.Z)
hold off
view(-45,15)
My expected result would be something like this:

Accepted Answer

Voss
Voss on 17 Feb 2022
clear all;clc;
s = [1 2 3 4];
t = [2 3 4 5];
x = [0 1 2 2 4];
y = [0 0 0 0 0];
z = [1 1 2 3 3];
G = graph(s,t);
G.Nodes.X = x'; G.Nodes.Y = y'; G.Nodes.Z = z';
hold on
plot(G,'XData',G.Nodes.X,'YData',G.Nodes.Y + 2,'ZData',G.Nodes.Z)
plot(G,'XData',G.Nodes.X,'YData',G.Nodes.Y,'ZData',G.Nodes.Z)
hold off
% use indexing into G.Nodes.X,Y,Z. each column of idx corresponds to a
% patch face.
idx = (1:numel(G.Nodes.X)-1)+[0; 1; 1; 0]
idx = 4×4
1 2 3 4 2 3 4 5 2 3 4 5 1 2 3 4
p_x = G.Nodes.X(idx);
p_y = G.Nodes.Y(idx);
p_y([3 4],:) = p_y([3 4],:)+2;
p_z = G.Nodes.Z(idx);
patch('XData',p_x,'YData',p_y,'ZData',p_z,'FaceColor','y','FaceAlpha',0.5);
view(-45,15)
  2 Comments
Voss
Voss on 18 Feb 2022
You're welcome! Glad I could help!

Sign in to comment.

More Answers (1)

Sim
Sim on 17 Feb 2022
Edited: Sim on 17 Feb 2022
I think found the way:
patch([x fliplr(x)], [y fliplr(y+2)], [z fliplr(z)], 'g')
Everything together will be:
clear all;clc;
s = [1 2 3 4];
t = [2 3 4 5];
x = [0 1 2 2 4];
y = [0 0 0 0 0];
z = [1 1 2 3 3];
G = graph(s,t);
G.Nodes.X = x'; G.Nodes.Y = y'; G.Nodes.Z = z';
hold on
plot(G,'XData',G.Nodes.X,'YData',G.Nodes.Y + 2,'ZData',G.Nodes.Z)
plot(G,'XData',G.Nodes.X,'YData',G.Nodes.Y,'ZData',G.Nodes.Z)
patch([x fliplr(x)], [y fliplr(y+2)], [z fliplr(z)], 'g')
hold off
view(-45,15)

Tags

Community Treasure Hunt

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

Start Hunting!