首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在matlab中获得逆颜色?

如何在matlab中获得逆颜色?
EN

Stack Overflow用户
提问于 2016-04-05 23:30:28
回答 2查看 118关注 0票数 0

我有下一个代码:但是在图(4)中,我想得到图(3)的反色,我的意思是,如果它在图(3)中看起来是黄色的,我想在图(4)中得到蓝色,其中黄色在图(3)中。我怎么能这么做?

代码语言:javascript
复制
% Modelo de Sel'kov en 1D

 % Este código en MATLAB simulara el modelo de Sel'kov para la glucólisis en 1D
 clear all
 close all

 %%%%%%%%%%%%%%%%%%%%%
 %%%Inicialización %%%
 %%%%%%%%%%%%%%%%%%%%%

 % Parámetros
 bc  = 0.6;
 ac =  0.08;
 Du = 1;   
 Dv = 2;  %Constantes difusivas

% Información inicial y mallado
 % w = 10;  %sin patrón
 w = 80;  % patrón

 Nx = 10000; % Total de puntos discretizados en el dominio [0,L]x[0,L]
 x = linspace(0,w,Nx);
 dx = x(2) - x(1);

 dt = 1; % tamaño del paso
 t = 0:dt:100;
 Nt = length(t); %numero de puntos en el tiempo

 % Condiciones para la superficie
 [X, T] = meshgrid(x, t);
 U = 0*X;
 V = 0*X;

 % Vectores columna (más fáciles)
 x = x(:);
 t = t(:);

 %Condición inicial: pequeña perturbación lejos del estado estable
 u = bc*ones(length(x),1) + 0.05*rand(Nx, 1);
 v = (bc/(ac + bc^2))*ones(length(x),1) + 0.05*rand(Nx,1);

 % Condiciones iniciales salvadas.
 U(1,:) = u;
 V(1,:) = v;


 %%%%%%%%%%%%%%%%%%%%%%%%%
 %%%Generando la matriz%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%
% Usando un esquema implícito 
%  For u
  a = (1+2*Du*dt/dx^2);  % valores en la diagonal
  b = -Du*dt/dx^2;        % valores fuera de la diagonal
  main = a*sparse(ones(Nx,1));
  off  = b*sparse(ones(Nx-1,1));
  Bu = diag(main) + diag(off,1) + diag(off,-1); %Matriz dispersa
% Condición de frontera de flujo cero
  Bu(1, end-1) = -b;
  Bu(end, 2) = -b;

%   For v
  a = (1+2*Du*dt/dx^2);  % valores en la diagonal
  b = -Du*dt/dx^2;        % valores fuera de la diagonal
  main = a*sparse(ones(Nx,1));
  off  = b*sparse(ones(Nx-1,1));
  Bv = diag(main) + diag(off,1) + diag(off,-1); %Matriz dispersa
% Condición de frontera flujo cero
  Bv(1, end-1) = -b;
  Bv(end, 2) = -b;

 %%%%%%%%%%%%%%%%%%%%%%%%%
 %%%    Resultados     %%%
 %%%%%%%%%%%%%%%%%%%%%%%%%

 figure(1); 
 plot(x,u,'g.-', 'linewidth',1);
 hold on;
 plot(x,v,'r.-', 'linewidth',1);
 hold off;

 axis([-1 80 -.01 15.01]) 

 for j = 1:Nt-1
     % f y g son los términos no lineales en el modelo de Sel'kov
     f= dx.^2.*(-u*+ac.*v+v.*u.^2);
     g= dx.^2.*(bc-ac.*v-v.*u.^2);
     %f = u.^2./v-bc*u;
     %g = u.^2 - v;

     % En cada paso resolvemos el sistema de ecuaciones
     u = Bu\(u + dt.*f);   
     v = Bv\(v + dt.*g);

     % Gráficas
     plot(x,u,'g.-', 'linewidth',1);
     hold on;
     plot(x,v,'r.-', 'linewidth',1);
     hold off;
    axis([-1 80 -.01 15.01])
     title(['t = ', num2str(j*dt)],'fontsize',24)
     drawnow;

     % Datos para la superficie
     U(j,:) = u;
     V(j,:) = v;
 end


 %%%% Gráfica de la superficie %%%%
 figure(1);
 s = surf(x, t, U);
 set(s, 'EdgeColor', 'none', 'FaceColor', 'interp'); 
 xlabel('<----x---->')
 ylabel('<----t---->')
 zlabel('<----u---->')

  figure(2);
 s = surf(x, t, V);
 set(s, 'EdgeColor', 'none', 'FaceColor', 'interp'); 
 xlabel('<----x---->')
 ylabel('<----t---->')
 zlabel('<----v---->')

 %%%% contour plot %%%
 figure(3);
 p = pcolor(x, t, U);
set(p, 'EdgeColor', 'none', 'FaceColor', 'interp');

 figure(4);
 r = pcolor(x, t, V);
 set(r, 'EdgeColor', 'none', 'FaceColor', 'interp');
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-05 23:40:56

在对图4的调用中将V更改为-V应该可以做到这一点:

代码语言:javascript
复制
figure(4);
r = pcolor(x, t, -V);
set(r, 'EdgeColor', 'none', 'FaceColor', 'interp');
票数 0
EN

Stack Overflow用户

发布于 2016-04-07 02:01:12

如果您不想实际更改数据的值,只需获取图形的颜色图并使用flipud将其反转即可。

代码语言:javascript
复制
cmap = colormap(gcf);
colormap(gcf, flipud(cmap))

这将反转颜色图,同时保持原始数据不受影响。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36438869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档