⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 netgraph_draw.m

📁 %The Metabolic Networks Toolbox contains functions to create, %modify, display, and simulate bioche
💻 M
字号:
%netgraph_draw(network,varargin)%%varargin contains overriding graphics parameters, either as a structure or as a list%%parameters:%%linecolor FontSize text_offset%%arrowstyle   {'fluxes','directions','none'}%arrowvaluesmax%%metstyle     {'box','box_std','none'}%metcolstyle  {'fixed','values'}%metvaluesmax%%actstyle     {'box','box_std','none'}%actcolstyle  {'fixed','values'}%actvaluesmax%chop_names   (length)function  network = netgraph_draw(network,varargin) black_and_white = 0;%black_and_white = 1;if ~isfield(network,'graphics_par'),  network=netgraph_make_graph(network);endp = network.graphics_par;if ~isfield(p,'N'), p.N=network.N; endif length(varargin)if isstruct(varargin{1}),  fn = fieldnames(varargin{1});  for i=1:length(fn), p=setfield( p, fn{i},getfield(varargin{1},fn{i})); endelse  for i=1:length(varargin)/2, p=setfield( p, varargin{2*(i-1)+1},varargin{2*i}); endendendif ~isfield(p,'metvalues_std'),  p.metvalues_std = zeros(size(p.metvalues));  end; if ~isfield(p,'actvalues_std'),  p.actvalues_std = zeros(size(p.actvalues)); end;if isfield(p,'metabolite_mapping'),if length(p.metvalues) < length(p.metnames), p.metvalues=p.metvalues(p.metabolite_mapping); endif length(p.metvalues_std) < length(p.metnames), p.metvalues_std=p.metvalues_std(p.metabolite_mapping);endendif ~isfield(p,'show_regulation'), p.show_regulation=0; end% values must be normalisedif ~isfield(p,'metvaluesmax'), p.metvaluesmax=[]; endif ~isfield(p,'actvaluesmax'), p.actvaluesmax=[]; endif ~isfield(p,'arrowvaluesmax'), p.arrowvaluesmax=[]; endif isempty(p.metvaluesmax), p.metvaluesmax=max(10^-10,max(abs(p.metvalues))); endmetvalues = p.metvalues /p.metvaluesmax; metvalues(find(metvalues>1))=1;  metvalues(find(metvalues<-1))=-1;metvalues_std =  p.metvalues_std /p.metvaluesmax;if isempty(p.actvaluesmax), p.actvaluesmax=max(10^-10,max(abs(p.actvalues))); endactvalues = p.actvalues /p.actvaluesmax;  actvalues(find(actvalues>1))=1;  actvalues(find(actvalues<-1))=-1;  actvalues_std =  p.actvalues_std /p.actvaluesmax;  if isempty(p.arrowvaluesmax), p.arrowvaluesmax=max(10^-10,max(abs(p.arrowvalues))); end arrowvalues = p.arrowvalues /p.arrowvaluesmax;  arrowvalues(find(arrowvalues>1))=1;  arrowvalues(find(arrowvalues<-1))=-1;   if isfield(p,'FontSize'),  fontsize=p.FontSize; else, fontsize=8; endm = p.m;x = p.x;n_met=length(metvalues);n_act=length(actvalues);plot(x(1,:), x(2,:), 'r.');axis([-0.1 1.1 -0.1 1.1])axis equal[i,j]=find(triu(m)); if isfield(p,'linecolor'), linecolor = p.linecolor;else                       linecolor = [0 0 1];endline([x(1,i); x(1,j)],[x(2,i); x(2,j)],'color',linecolor);hold onif isfield(p,'m_regulation') & p.show_regulation,  [i,j]=find(triu(p.m_regulation));   if isfield(p,'linecolor'), linecolor = 0.5+0.5*p.linecolor;  else                       linecolor = [0. 1 0.];  end  line([x(1,i); x(1,j)],[x(2,i); x(2,j)],'color',linecolor);end[i1,j1] = find(m(1:n_met,end-n_act+1:end));switch p.arrowstyle,    case 'fluxes'   for k=1:length(i),      scale = arrowvalues( j1(k) );      plot_triangle(x(1,i1(k)), x(1,j1(k)+n_met), x(2,i1(k)), x(2,j1(k)+n_met),...		    p.arrowsize*abs(scale), 'b', -p.N(i1(k),j1(k))*sign(scale));    end     case 'directions'    for k=1:length(i1),       plot_triangle(x(1,i1(k)), x(1,j1(k)+n_met), x(2,i1(k)), x(2,j1(k)+n_met),...		    p.arrowsize, 'b', -sign(p.N(i1(k),j1(k))));     end    endif black_and_white,   d = 0.5-0.5*sign(gray(250)-0.5);else,  d = my_colors;endswitch p.metcolstyle  case 'fixed',  c = repmat(p.metcol,n_met,1);  case 'values',  c=d(ceil(1+(1+metvalues)*0.5*249),:);endswitch p.metstyle case 'box',  for i=1:n_met,  plot_octagon(x(1,i),x(2,i),abs(metvalues(i)),0*metvalues_std(i),p.squaresize,c(i,:)); end;  case 'box_std',  for i=1:n_met,  plot_octagon(x(1,i),x(2,i),abs(metvalues(i)),metvalues_std(i),p.squaresize,c(i,:)); end; endswitch p.actcolstyle   case 'fixed',  c = repmat(p.actcol,n_act,1);  case 'values',  c=d(ceil(1+(1+actvalues)*0.5*249),:);endswitch p.actstyle, case 'box',  for i=1:n_act,    plot_square(x(1,i+n_met),x(2,i+n_met),abs(actvalues(i)),0*actvalues_std(i),p.squaresize,c(i,:)); end;  case 'box_std',  for i=1:n_act,    plot_square(x(1,i+n_met),x(2,i+n_met),abs(actvalues(i)),actvalues_std(i),p.squaresize,c(i,:)); end; endhold offif isfield(p,'chop_names'),    dummi = char(p.metnames);    p.metnames=cellstr(dummi(:,1:min(p.chop_names,size(dummi,2))));    dummi = char(p.actnames);    p.actnames=cellstr(dummi(:,1:min(p.chop_names,size(dummi,2))));endif isfield(p,'text_offset'), text_offset=p.text_offset; else text_offset=[0;-0.01]; endif p.metprintnames, text(x(1,1:n_met) + 0.5*p.squaresize*(0.5+sqrt(abs(metvalues)'+ metvalues_std')) +text_offset(1),x(2,1:n_met)+text_offset(2), p.metnames,'FontSize',fontsize); endif p.actprintnames, text(x(1,n_met+1:end) + 0.5*p.squaresize*(0.5+sqrt(abs(actvalues)'+actvalues_std')) +text_offset(1),x(2,n_met+1:end)+text_offset(2), p.actnames,'FontSize',fontsize); endif p.metprintvalues,  if find(p.metvalues_std~=0),    strings =  [num2str(p.metvalues,3) repmat(' \pm ',n_met,1) num2str(p.metvalues_std,2)]; else    strings = num2str(p.metvalues_std);  end offset=0.5*p.squaresize*(0.5+sqrt(abs(metvalues)'+metvalues_std')); text(x(1,1:n_met)+0*offset,x(2,1:n_met)+ offset,strings,'FontSize',fontsize); endif p.actprintvalues,   if find(p.actvalues_std~=0),  strings =  [num2str(p.actvalues,3) repmat(' \pm ',n_act,1) num2str(p.actvalues_std,2)]; else strings = num2str(p.actvalues); endoffset=0.5*p.squaresize*(0.5+sqrt(abs(actvalues)'+actvalues_std'));text(x(1,n_met+1:end) + 0*offset,x(2,n_met+1:end) + offset,strings,'FontSize',fontsize); endnetwork.graphics_par = p;noticks% -----------------------------------------------------function plot_square(x,y,l,std,squaresize,col)l_max = squaresize*sqrt(l+std); l_min = squaresize*sqrt(max(0,l));fill(x + 0.5 * l_max*[-1 1 1 -1], y + 0.5*l_max*[-1 -1 1 1],1+0*col)fill(x + 0.5 * l_min*[-1 1 1 -1], y + 0.5*l_min*[-1 -1 1 1],col)function plot_octagon(x,y,l,std,squaresize,col)l_max = squaresize*sqrt(l+std); l_min = squaresize*sqrt(max(0,l));fill(x + 0.5 * l_max * 4/pi* [-1 -0.5 0.5 1 1 0.5 -0.5 -1], y + 0.5*l_max*4/pi*[-0.5 -1 -1 -0.5 0.5 1 1 0.5],1+0*col)fill(x + 0.5 * l_min * 4/pi* [-1 -0.5 0.5 1 1 0.5 -0.5 -1], y + 0.5*l_min*4/pi*[-0.5 -1 -1 -0.5 0.5 1 1 0.5],col)function plot_triangle(xmin, xmax, ymin, ymax, l, col,reverse)phi = angle( xmax-xmin + i *(ymax-ymin)); points = repmat([xmin; ymin] + 0.5*[xmax-xmin; ymax-ymin],1,3) ...	  + reverse * [cos(phi) -sin(phi); sin(phi) cos(phi)] * l * [0 1 0; -0.3 0 0.3]; fill(points(1,:),points(2,:),col)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -