How can I create a patch between two graphs?

13 vues (au cours des 30 derniers jours)
Sim
Sim le 17 Fév 2022
Commenté : Voss le 18 Fév 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:

Réponse acceptée

Voss
Voss le 17 Fév 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 commentaires
Sim
Sim le 18 Fév 2022
Modifié(e) : Sim le 18 Fév 2022
Thanks a lot @_! I think we got the same idea, but yours is way much cooler and efficient !! Many thanks :)
Voss
Voss le 18 Fév 2022
You're welcome! Glad I could help!

Connectez-vous pour commenter.

Plus de réponses (1)

Sim
Sim le 17 Fév 2022
Modifié(e) : Sim le 17 Fév 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)

Catégories

En savoir plus sur Graphics Performance dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by