Scaling color with selected axis data

3 visualizzazioni (ultimi 30 giorni)
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 Commenti
Rahul Kumar
Rahul Kumar il 23 Set 2019
I think you should change the sequence of plot as x,z,y.
Aikaterini Mountraki
Aikaterini Mountraki il 23 Set 2019
Modificato: Aikaterini Mountraki il 23 Set 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)

Accedi per commentare.

Risposta accettata

darova
darova il 23 Set 2019
Modificato: darova il 23 Set 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

Più risposte (1)

Ankit
Ankit il 23 Set 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 Commenti
Aikaterini Mountraki
Aikaterini Mountraki il 23 Set 2019
Ankit thank you for your reply. It is an interesting suggestion, but the lines still get random colors.
Ankit
Ankit il 23 Set 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'));

Accedi per commentare.

Categorie

Scopri di più su Line Plots in Help Center e File Exchange

Prodotti


Release

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by