Scaling color with selected axis data

4 vues (au cours des 30 derniers jours)
Aikaterini Mountraki
Aikaterini Mountraki le 23 Sep 2019
Modifié(e) : darova le 23 Sep 2019
I want to plot a function z = f (x,y), but I want the lines (y-axis) to be the color scale.
This is my code:
% parameters
x= [0:1:30]' ;
y= linspace(0.1,10,length(x)) ;
% function
if (x <= max(x)*ones(size(x)) )
z = (x./max(x)).^y ;
else
z = 1 ;
end
% Plot
fig1 = plot3(x,y,z) ;
view([-120 20])
xlabel('x')
ylabel('y')
zlabel('z')
colorbar
  2 commentaires
Rahul Kumar
Rahul Kumar le 23 Sep 2019
I think you should change the sequence of plot as x,z,y.
Aikaterini Mountraki
Aikaterini Mountraki le 23 Sep 2019
Modifié(e) : Aikaterini Mountraki le 23 Sep 2019
Than you for your reply, but even so, the lines still have random colors, they are not scaled as a function of y.
Moreover, what you are suggesting can also be done without changing the order of the plot with:
caxis(ylim)

Connectez-vous pour commenter.

Réponse acceptée

darova
darova le 23 Sep 2019
Modifié(e) : darova le 23 Sep 2019
Why not use surf()?
Color lines using patch()
clc,clear
% parameters
x= [0:1:30]' ;
y= linspace(0.1,10,length(x)) ;
[X,Y] = meshgrid(x,y);
X(end+1,:) = nan; % put NaN where line ends
Y(end+1,:) = nan;
% function
Z = (X./max(x)).^Y ;
% plot preparations
n = length(x);
cm = jet(n); % create 31 colors
z0 = linspace(min(Z(:)),max(Z(:)),n);
cmap = interp1(z0,cm,Z(:)); % get color for each Z
% cmap(isnan(cmap)) = 0; % replace NaN
% Plot
cla
f = 1:length(Z(:))-1;
p = patch('Vertices',[X(:),Y(:),Z(:)], ...
'Faces', [f' f'+1],...
'EdgeColor','interp', ...
'FaceVertexCData',cmap);
% 'Marker','.');
view([-120 20])
xlabel('x')
ylabel('y')
zlabel('z')
colorbar
% if graphical driver fails
% opengl software

Plus de réponses (1)

Ankit
Ankit le 23 Sep 2019
Hello Aikaterini,
Please try this out:
% parameters
x= [0:1:30]' ;
y= linspace(0.1,10,length(x)) ;
% function
if (x <= max(x)*ones(size(x)) )
z = (x./max(x)).^y ;
else
z = 1 ;
end
% Plot
fig1 = plot3(x,y,z) ;
view([-120 20])
xlabel('x')
ylabel('y')
zlabel('z')
cb = colorbar;
set(gca, 'clim', get(gca, 'ylim'));
set(cb, 'Ticks', get(gca, 'ytick'));
Regards
Ankit
  2 commentaires
Aikaterini Mountraki
Aikaterini Mountraki le 23 Sep 2019
Ankit thank you for your reply. It is an interesting suggestion, but the lines still get random colors.
Ankit
Ankit le 23 Sep 2019
Just give it a try! here i get the colormap and the later set it to the colorbar. But I dont see the difference Just to give you an Idea!
% parameters
x= [0:1:30]' ;
y= linspace(0.1,10,length(x)) ;
% function
if (x <= max(x)*ones(size(x)) )
z = (x./max(x)).^y ;
else
z = 1 ;
end
% Plot
fig1 = plot3(x,y,z) ;
view([-120 20])
xlabel('x')
ylabel('y')
zlabel('z')
cmap = colormap(gca);
cb = colorbar;
set(gca, 'clim', get(gca, 'ylim'));
set(cb, 'colormap', cmap);
set(cb, 'Ticks', get(gca, 'ytick'));

Connectez-vous pour commenter.

Catégories

En savoir plus sur Discrete Data Plots dans Help Center et File Exchange

Produits


Version

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by