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

📄 fm_plot.m

📁 基于PSAT 软件的多目标最优潮流计算用于中小型电力系统的分析和管理
💻 M
📖 第 1 页 / 共 2 页
字号:
function fm_plot(flag)% FM_PLOT plot results of Continuation Power Flow,%         Optimal Power Flow and Tiam Domain%         Simulations.%% FM_PLOT(FLAG)%    FLAG  0 -> create variable list%          1 -> plot selected variables%          2 -> save graph%          3 -> set layout%%Author:    Federico Milano%Date:      11-Nov-2002%Update:    25-Feb-2003%Update:    26-Jan-2005%Version:   1.0.2%%E-mail:    fmilano@thunderbox.uwaterloo.ca%Web-site:  http://thunderbox.uwaterloo.ca/~fmilano%% Copyright (C) 2002-2006 Federico Milanoglobal DAE Bus Syn Settings Fig Snapshot Hdlglobal Varout Varname Path File OPF Theme GAMShdlfig = Hdl.axesplot;hdlfig2 = Hdl.axeslogo;Hdl_grid = findobj(Fig.plot,'Tag','Checkbox1');Hdl_legend = findobj(Fig.plot,'Tag','Checkbox2');Hdl_listvar = findobj(Fig.plot,'Tag','Listbox1');Hdl_listplot = findobj(Fig.plot,'Tag','Listbox2');Hdl_tipoplot = findobj(Fig.plot,'Tag','PopupMenu1');Hdl_angref = findobj(Fig.plot,'Tag','PopupMenu2');Hdl_snap = findobj(Fig.plot,'Tag','Radiobutton1');hdl_zoom1 = findobj(Fig.plot,'Tag','Pushbutton12');hdl_zoom2 = findobj(Fig.plot,'Tag','Pushbutton11');hdl_zoom3 = findobj(Fig.plot,'Tag','Pushbutton4');hdl_x = findobj(Fig.plot,'Tag','Pushbutton9');hdl_y = findobj(Fig.plot,'Tag','Pushbutton5');hdl_xy = findobj(Fig.plot,'Tag','Pushbutton10');switch flag case 'exporttext',  % output data as plain text file  flag = 'plotvars';  out_matlab = 0;  out_mtv = 0;  out_text = 1; case 'exportmtv',  % output data as plain text file  flag = 'plotvars';  out_matlab = 0;  out_mtv = 1;  out_text = 0; case 'exportscript',  % output data as plain text file  flag = 'plotvars';  out_matlab = 1;  out_mtv = 0;  out_text = 0; otherwise  out_matlab = 0;  out_mtv = 0;  out_text = 0;endswitch flag case 'initlist'  if ~strcmp(get(Fig.plot,'UserData'),File.modify)    set(Hdl_listvar,'String',enum(Varname.uvars(Varout.idx)),'Value',1);    Varname.changes = sparse(length(Varout.idx),1);    set(Fig.plot,'DefaultAxesColorOrder',Settings.color, ...                 'DefaultAxesLineStyle','-');  end  set(Fig.plot,'UserData',File.modify)  case 'initxlabel'  first = strrep(Settings.xlabel,'\','');  hdl = findobj(Fig.plot,'Tag','Listbox1');  stringa = get(hdl,'String');  hdl = findobj(Fig.plot,'Tag','PopupMenu3');  if ~isempty(stringa)    set(hdl,'String',[{first}; stringa],'Enable','on','Value',1)  end case 'plotvars'  if isempty(Varout.t)    fm_disp('Plotting Utilities: No data available for plotting.')    return  end  if isempty(Varname.po)    fm_disp('Plotting Utilities: Select variables to be plotted.')    return  end    nB = Bus.n;  nD = DAE.n;  Value = get(Hdl_listvar,'Value');  if isempty(Value), return, end  AxesFont   = get(hdlfig,'FontName');  AxesColor  = get(hdlfig,'Color');  AxesWeight = get(hdlfig,'FontWeight');  AxesAngle  = get(hdlfig,'FontAngle');  AxesSize   = get(hdlfig,'FontSize');  AxesUnits  = get(hdlfig,'FontUnits');  plot_snap = get(Hdl_snap,'Value');  if plot_snap & ~OPF.init    snap_idx = [];    for i = 1:length(Snapshot);      a = find(Varout.t == Snapshot(i).time);      if isempty(a)        fm_disp(['Plotting utilities: Snapshots do not match ' ...                 'current simulation data'],2)        Hdl_rad1 = findobj(gcf,'Tag','Radiobutton1');        set(Hdl_rad1,'Value',0);        plot_snap = 0;        snap_idx = [1:length(Varout.t)];      else        snap_idx(i) = a;      end    end  else    snap_idx = 1:length(Varout.t);  end  legenda = Varname.fvars(Varout.idx(Value(Varname.po)));  leg_value = get(Hdl_legend,'Value');  hdlab = findobj(Fig.plot,'Tag','PopupMenu3');  AbValue = get(hdlab,'Value');  Y = Varout.vars(:,Value);  if isempty(Y), return, end  % set reference angle  if ~OPF.init    ang_idx = get(Hdl_angref,'Value')-1;    if ~ang_idx      angolo = zeros(length(Varout.t),1);    else      ref_idx = get(Hdl_angref,'UserData');      ang_ref = ref_idx(ang_idx);      angolo = Varout.vars(:,ang_ref);    end    for i = 1:length(Value)      kk = Varout.idx(Value(i));      if ~isempty(find(Syn.delta == kk))        Y(:,i) = Y(:,i) - angolo;      elseif kk > nD+nB & kk <= nD+2*nB        Y(:,i) = Y(:,i) - angolo;      end    end  end  if AbValue == 1    X = Varout.t;  else    X = Varout.vars(:,AbValue-1);  end  tipoplot = get(Hdl_tipoplot,'Value');  if out_text    plainfile = fm_filenum('txt');    fid = fopen([Path.data,plainfile,'.txt'],'wt');    if fid == -1      fm_disp('Cannot open file. Data not saved.')      return    end    fprintf(fid,'C Legend:\n');    fprintf(fid,'C %s,  ',Settings.xlabel);    for i = 1:size(Y,2)      fprintf(fid,'%s,  ',legenda{i});    end    fprintf(fid,'\nC Data:\n');    fprintf(fid,[repmat('%8.5f  ',1,1+size(Y,2)),'\n'],[X,Y]');    fclose(fid);    fm_disp(['Data exported to plain text file "',plainfile,'.txt"'])  end  if out_mtv    plainfile = fm_filenum('mtv');    fid = fopen([Path.data,plainfile,'.mtv'],'wt');    if fid == -1      fm_disp('Cannot open file. Data not saved.')      return    end    %fprintf(fid,'$ DATA=CURVE2D\n');    fprintf(fid,'%% xlabel = "%s"\n',Settings.xlabel);    if min(X) < max(X)      fprintf(fid,'%% xmin = %8.5f\n',min(X));      fprintf(fid,'%% xmax = %8.5f\n',max(X));    end    fprintf(fid,'\n');    if tipoplot == 3 | tipoplot == 6      fm_disp('MTV format does not support numbered plots.')    end    for i = 1:size(Y,2)      labelmtv = strrep(legenda{i},'{','');      labelmtv = strrep(labelmtv,'}','');      labelmtv = strrep(labelmtv,'_',' ');      labelmtv = strrep(labelmtv,'\','');      fprintf(fid,'%% linelabel="%s"\n',labelmtv);      switch tipoplot       case 2        linetype = rem(i-1,10)+1;        linecolor = 1;        markertype = 0;        markercolor = 1;       case 4        linetype = 1;        linecolor = 1;        markertype = rem(i-1,13)+1;        markercolor = 1;       case 5        linetype = 1;        linecolor = rem(i-1,10)+1;        markertype = rem(i-1,13)+1;        markercolor = linecolor;       otherwise        linetype = 1;        linecolor = rem(i-1,10)+1;        markertype = 0;        markercolor = 1;      end      fprintf(fid,'%% linetype=%d linecolor=%d markertype=%d markercolor=%d\n', ...              linetype,linecolor,markertype,markercolor);      fprintf(fid,'%8.5f %8.5f\n',[X,Y(:,i)]');      fprintf(fid,'\n');    end    fclose(fid);    fm_disp(['Data exported to MTV plot file "',plainfile,'.mtv"'])  end  if out_matlab    plainfile = fm_filenum('m');    fid = fopen([Path.data,plainfile,'.m'],'wt');    if fid == -1      fm_disp('Cannot open file. Data not saved.')      return    end    fprintf(fid,'x_label = ''%s'';\n',Settings.xlabel);    fprintf(fid,'\nvar_legend = {');    for i = 1:size(Y,2)-1      fprintf(fid,'''%s'', ',legenda{i});    end    fprintf(fid,'''%s''};\n',legenda{end});    fprintf(fid,'\noutput_data = [ ...\n');    fprintf(fid,[repmat('%8.5f  ',1,1+size(Y,2)),';\n'], ...            [X(1:end-1),Y(1:end-1,:)]');    fprintf(fid,[repmat('%8.5f  ',1,1+size(Y,2)),'];\n'], ...            [X(end),Y(end,:)]');    fclose(fid);    fm_disp(['Data exported to plain text file "',plainfile,'.m"'])  end  set(Fig.plot,'CurrentAxes',hdlfig);  plot(X(snap_idx),Y(snap_idx,Varname.po));  if AbValue == 1    xlabel(Settings.xlabel);  else    xlabel(Varname.fvars{AbValue-1});  end  if min(X) < max(X)    set(hdlfig,'XLim',[min(X),max(X)])  end  %legend  if leg_value == 1 | Settings.hostver >= 7    hleg = legend(legenda,0);    Hdl.legend = hleg;    set(hleg,'Color',AxesColor)    hchild = get(hleg,'Child');    set(hchild(end), ...        'FontName',AxesFont, ...        'FontWeight',AxesWeight, ...        'FontAngle',AxesAngle)  end  if tipoplot == 3 | tipoplot == 6    [quanti,tanti] = size(Y);    passo = (quanti-rem(quanti,8))/8;    colori = get(gcf,'DefaultAxesColorOrder');    for i = 1:tanti      if plot_snap        sequenza = snap_idx;      else        tmin = min(Varout.t);        tmax = max(Varout.t);        deltat = (tmax-tmin)/5;        tmin = tmin + i*(tmax-tmin)/43;        seqt = tmin:deltat:tmax;        for j = 1:length(seqt),          [valt, sequenza(j)] = min(abs(Varout.t-seqt(j)));        end      end      hdl = text(Varout.t(sequenza), ...                 Y(sequenza,i),num2str(Varname.po(i)));      if tipoplot == 6,        set(hdl,'Color',colori(rem(i-1,7)+1,:));      end    end    if leg_value == 1 | Settings.hostver >= 7      hdl = findobj(Fig.plot,'Tag','legend');      oldh = gca;      set(gca,'HandleVisibility','off')      set(hdl,'Interruptible','on')      h = findobj(hdl,'Type','line');      for i = 1:tanti        j = i*2;        xdata = get(h(j),'XData');        ydata = get(h(j),'YData');        htext = text((xdata(2)-xdata(1))/2,ydata(1), ...                     int2str(tanti-i+1));        set(htext,'Color',get(h(j),'Color'));      end      set(oldh,'HandleVisibility','on')      set(Fig.plot,'CurrentAxes',oldh);    end  elseif tipoplot == 4 | tipoplot == 5    [quanti,tanti] = size(Y);    passo = (quanti-rem(quanti,8))/8;    hold on    simboli = {'o';'s';'d';'v';'^';'<';'>';'x'};    colori = get(Fig.plot,'DefaultAxesColorOrder');    for i = 1:tanti      if plot_snap        sequenza = snap_idx;      else        tmin = min(Varout.t);        tmax = max(Varout.t);        deltat = (tmax-tmin)/5;        tmin = tmin + i*(tmax-tmin)/43;        seqt = tmin:deltat:tmax;        for j = 1:length(seqt),          [valt, sequenza(j)] = min(abs(Varout.t-seqt(j)));        end      end      set(hdlfig,'LineStyle',simboli{rem(i-1,8)+1});      hmarker = plot(Varout.t(sequenza), ...                     Y(sequenza,Varname.po(i)));      set(hmarker,'MarkerSize',7, ...                  'MarkerFaceColor',AxesColor);      if tipoplot == 5,        set(hmarker,'Color',colori(rem(i-1,7)+1,:));      end    end    hold off;    if leg_value == 1 | Settings.hostver >= 7      hdl = findobj(Fig.plot,'Tag','legend');      set(Fig.plot,'CurrentAxes',hdl);      h = findobj(hdl,'Type','line');      for i = 1:tanti        j = i*2;        xdata = get(h(j),'XData');        ydata = get(h(j),'YData');        set(hdl,'LineStyle',simboli{rem(tanti-i,8)+1});        if Settings.hostver >= 7          hmarker = plot(hdl,(xdata(2)-xdata(1))/1.2,ydata(1));        else          hmarker = plot((xdata(2)-xdata(1))/1.2,ydata(1));        end        set(hmarker,'MarkerSize',7, ...                    'Color',get(h(j),'Color'), ...                    'MarkerFaceColor',AxesColor);      end      set(Fig.plot,'CurrentAxes',hdlfig);    end  end  if get(Hdl_grid,'Value'); grid on; end  if ~get(Hdl_legend,'Value') & Settings.hostver >= 7    legend(Hdl.axesplot,'hide')  end  set(get(hdlfig,'XLabel'), ...      'FontName',AxesFont, ...      'FontWeight',AxesWeight, ...      'FontAngle',AxesAngle, ...      'FontSize',AxesSize, ...      'FontUnits',AxesUnits)  set(hdlfig, ...      'FontName',AxesFont, ...      'Color',AxesColor, ...      'FontWeight',AxesWeight, ...      'FontAngle',AxesAngle, ...      'FontSize',AxesSize, ...      'FontUnits',AxesUnits)  if Fig.line > 0, fm_plot('createlinelist'), end  if get(hdl_x, 'Value'), fm_plot('axesx'), end  if get(hdl_y, 'Value'), fm_plot('axesy'), end  if get(hdl_xy,'Value'), fm_plot('axesxy'), end case 'export' % export the figure to file  tag = get(gcbo,'Tag');  SSize = get(0,'ScreenSize');  Sratio = SSize(3)/SSize(4);  axs_pos = get(Hdl.axesplot,'Position');  fig_pos = get(Fig.plot,'Position');  pap_pos = get(Fig.plot,'PaperPosition');  pap_siz = get(Fig.plot,'PaperSize');  leg_value = get(Hdl_legend,'Value');  if leg_value    pos_leg = get(Hdl.legend,'Position');  end  shrink = 0.8; % axes scale factor  set(Hdl.axesplot,'Position',[0.13 0.11 0.855 0.875])  set(Fig.plot,'Position',[fig_pos(1), fig_pos(2), ...                      fig_pos(3)*shrink, fig_pos(4)*shrink])  if leg_value    pos_leg2(1) = 0.13 + 0.855*(pos_leg(1) - axs_pos(1))/axs_pos(3);    pos_leg2(2) = 0.11 + 0.875*(pos_leg(2) - axs_pos(2))/axs_pos(4);    pos_leg2(3) = pos_leg(3)*0.855/axs_pos(3);    pos_leg2(4) = pos_leg(4)*0.875/axs_pos(4);    set(Hdl.legend,'Position',pos_leg2);    if pos_leg2(1)+pos_leg2(3) > 0.985      Resize = (pos_leg2(1)+pos_leg2(3))/0.985;      fig_pos2 = [0.13 0.11 0.855 0.875];      fig_pos2(3) = fig_pos2(3)/Resize;      fig_pos2(1) = fig_pos2(1)/Resize;      pos_leg2(3) = pos_leg2(3)/Resize;      pos_leg2(1) = pos_leg2(1)/Resize;      set(Hdl.axesplot,'Position',fig_pos2)      set(Hdl.legend,'Position',pos_leg2)    end  end  if Settings.hostver > 5.3,    set(Fig.plot,'PaperSize',[pap_siz(1)*shrink, pap_siz(2)*shrink])  end  ppos(3) = pap_pos(3)*shrink;  ppos(4) = pap_pos(4)*shrink;  ppos(1) = (pap_siz(1)-ppos(3))/2;  ppos(2) = (pap_siz(2)-ppos(4))/2;  set(Fig.plot,'PaperPosition',ppos)  ax2_pos = get(Hdl.axeslogo,'Position');  set(Hdl.axeslogo,'Position',[10 10 0.2 0.2]);  Hdl_all = get(Fig.plot,'Children');  idx = find(Hdl_all==Hdl.axesplot);  if idx, Hdl_all(idx) = []; end  idx = find(Hdl_all==Hdl.axeslogo);  if idx, Hdl_all(idx) = []; end  if leg_value,    idx = find(Hdl_all==Hdl.legend);    if idx, Hdl_all(idx) = []; end  end  set(Hdl_all,'Visible','off');  warning off  lastwarn('')  switch tag   case 'PushEPS'

⌨️ 快捷键说明

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