Comment définir un surf sur une couleur (sans gradient) dans mon MATLAB-plot?

mon ensemble de données se compose de trois vecteurs (x,y et z). Je trace ces valeurs sous forme de points dans un graphique 3d avec plot3(x,y,z), ce qui est très bien. Je veux aussi montrer un avion dans la même parcelle. Pour obtenir les données de ce graphe, j'utilise la régression linéaire sur x et y pour obtenir un nouveau z.

C'est à quoi il ressemble:

alt text

je veux que le surf soit rempli d'une seule couleur (Bleu clair ou gris) et régler l'opacité, pour le rendre transparent. Comment puis-je faire cela?

16
demandé sur Community 2009-01-29 19:03:37

4 réponses

la façon la plus simple de créer une surface qui n'a qu'une seule couleur et une valeur de transparence donnée est de définir les propriétés 'FaceColor' et 'FaceAlpha' de l'objet de surface:

hSurface = surf(...your arguments to create the surface object...);
set(hSurface,'FaceColor',[1 0 0],'FaceAlpha',0.5);

cet exemple définit la couleur de la surface à rouge et la transparence à 0.5. Vous pouvez également définir les propriétés edge (avec 'EdgeColor' et 'EdgeAlpha').

25
répondu gnovice 2009-01-29 16:47:54

Il n'est pas clair pour moi ce que vous voulez faire. Quand vous dites qu'une seule couleur pour le surf, voulez-vous dire exactement la même couleur, ou voulez-vous dire que vous voulez nuances de gris?

voici un code qui va faire une variété de choses, vous pouvez choisir quelles lignes utiliser:

x = rand(1,20);
y = rand(1,20);
z = rand(1,20);

[X,Y] = meshgrid(linspace(0,1,10),linspace(0,1,10));
Z = rand(10)*0.1;

clf
plot3(x,y,z,'.');
hold on
h = surf(X,Y,Z)
hold off

%% This will change the color
colormap(copper)
%% This will remove colordata
set(h, 'cdata',zeros(10))
%% This will make transparent
alpha(0.5)
4
répondu MatlabDoug 2009-01-29 18:52:13

réponse de gnovice, un ingrédient supplémentaire dans set(hsurface...) peut être nécessaire (Matlab R2010b 64):

hSurface = surf(...your arguments to create the surface object...);
set(hSurface, 'FaceColor',[1 0 0], 'FaceAlpha',0.5, 'EdgeAlpha', 0);

rendre invisibles les bords de point à point de la surface tracée

4
répondu jose antonio villacorta 2012-09-15 11:20:39

@ matlabDoug a ce dont vous avez besoin, je pense. La propriété cdata contient des données de couleur qui reçoivent une carte de couleur appliquée à elle. Le paramétrer à un tableau de la même taille que vos données de surface, avec chaque élément dans ce tableau ayant la même valeur, fera votre surface une couleur. Avec la carte des couleurs par défaut, tout mettre dans cdata à zéro rendra votre surface bleue, et tout mettre à 1 rendra la surface rouge. Ensuite, vous pouvez jouer avec l'alpha pour le faire transparent.

1
répondu Scottie T 2017-05-23 12:25:26