📄 netgraph_draw.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 + -