How can I create a patch between two graphs?

13 Ansichten (letzte 30 Tage)
Sim
Sim am 17 Feb. 2022
Kommentiert: Voss am 18 Feb. 2022
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:

Akzeptierte Antwort

Voss
Voss am 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 Kommentare
Sim
Sim am 18 Feb. 2022
Bearbeitet: Sim am 18 Feb. 2022
Thanks a lot @_! I think we got the same idea, but yours is way much cooler and efficient !! Many thanks :)
Voss
Voss am 18 Feb. 2022
You're welcome! Glad I could help!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Sim
Sim am 17 Feb. 2022
Bearbeitet: Sim am 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)

Kategorien

Mehr zu Graphics Performance finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by