Changeset 4837
- Timestamp:
- Mar 3, 2021 3:02:07 PM (3 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIdataGUI.py
r4833 r4837 5190 5190 dlg.Update(101.) # forces the Auto_Hide; needed after move w/Win & wx3.0 5191 5191 dlg.Destroy() 5192 # wx.Yield()5193 5192 if OK: 5194 5193 Rw = Rvals['Rwp'] … … 5213 5212 dlg2 = wx.MessageDialog(self,text,'Refinement results, Rw =%.3f'%(Rw),wx.OK|wx.CANCEL) 5214 5213 dlg2.CenterOnParent() 5214 dlg2.Raise() 5215 5215 try: 5216 5216 if dlg2.ShowModal() == wx.ID_OK: -
trunk/GSASIIplot.py
r4835 r4837 883 883 page.canvas.SetCursor(wx.StockCursor(wx.CURSOR_CROSS)) 884 884 885 def PlotFPAconvolutors(G2frame,NISTpk): 886 '''Plot the convolutions used for the current peak computed with 887 :func:`GSASIIfpaGUI.doFPAcalc` 888 ''' 889 import NIST_profile as FP 890 new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('FPA convolutors','mpl') 891 Page.SetToolTipString('') 892 cntr = NISTpk.twotheta_window_center_deg 893 Plot.set_title('Peak convolution functions @ 2theta={:.3f}'.format(cntr)) 894 Plot.set_xlabel(r'$\Delta 2\theta, deg$',fontsize=14) 895 Plot.set_ylabel(r'Intensity (arbitrary)',fontsize=14) 896 # refColors=['b','r','c','g','m','k'] 897 refColors = ['xkcd:blue','xkcd:red','xkcd:green','xkcd:cyan','xkcd:magenta','xkcd:black', 898 'xkcd:pink','xkcd:brown','xkcd:teal','xkcd:orange','xkcd:grey','xkcd:violet',] 899 ttmin = ttmax = 0 900 #GSASIIpath.IPyBreak() 901 i = -1 902 for conv in NISTpk.convolvers: 903 if 'smoother' in conv: continue 904 if 'crystallite_size' in conv: continue 905 f = NISTpk.convolver_funcs[conv]() 906 if f is None: continue 907 i += 1 908 FFT = FP.best_irfft(f) 909 if f[1].real > 0: FFT = np.roll(FFT,int(len(FFT)/2.)) 910 FFT /= FFT.max() 911 ttArr = np.linspace(-NISTpk.twotheta_window_fullwidth_deg/2, 912 NISTpk.twotheta_window_fullwidth_deg/2,len(FFT)) 913 ttmin = min(ttmin,ttArr[np.argmax(FFT>.005)]) 914 ttmax = max(ttmax,ttArr[::-1][np.argmax(FFT[::-1]>.005)]) 915 color = refColors[i%len(refColors)] 916 Plot.plot(ttArr,FFT,color,label=conv[5:]) 917 legend = Plot.legend(loc='best') 918 SetupLegendPick(legend,new) 919 Page.toolbar.push_current() 920 Plot.set_xlim((ttmin,ttmax)) 921 Page.toolbar.push_current() 922 Page.ToolBarDraw() 923 Page.canvas.draw() 924 925 def SetupLegendPick(legend,new,delay=5): 926 mplv = eval(mpl.__version__.replace('.',',')) 927 legend.delay = delay*1000 # Hold time in ms for clear; 0 == forever 928 for line in legend.get_lines(): 929 if mplv[0] >= 3 and mplv[1] >= 3: 930 line.set_pickradius(4) 931 else: 932 line.set_picker(4) 933 # bug: legend items with single markers don't seem to respond to a "pick" 934 #GSASIIpath.IPyBreak() 935 for txt in legend.get_texts(): 936 try: # as of MPL 3.3.2 this has not changed 937 txt.set_picker(4) 938 except AttributeError: 939 txt.set_pickradius(4) 940 if new: 941 legend.figure.canvas.mpl_connect('pick_event',onLegendPick) 942 943 def onLegendPick(event): 944 '''When a line in the legend is selected, find the matching line 945 in the plot and then highlight it by adding/enlarging markers. 946 Set up a timer to make a reset after delay selected in SetupLegendPick 947 ''' 948 def clearHighlight(event): 949 if not canvas.timer: return 950 l,lm,lms,lmw = canvas.timer.lineinfo 951 l.set_marker(lm) 952 l.set_markersize(lms) 953 l.set_markeredgewidth(lmw) 954 canvas.draw() 955 canvas.timer = None 956 canvas = event.artist.get_figure().canvas 957 if not hasattr(canvas,'timer'): canvas.timer = None 958 plot = event.artist.get_figure().get_axes()[0] 959 if hasattr(plot.get_legend(),'delay'): 960 delay = plot.get_legend().delay 961 if canvas.timer: # clear previous highlight 962 if delay > 0: canvas.timer.Stop() 963 clearHighlight(None) 964 #if delay <= 0: return # use this in place of return 965 # so that the next selected item is automatically highlighted (except when delay is 0) 966 return 967 if event.artist in plot.get_legend().get_lines(): # is this an artist item in the legend? 968 lbl = event.artist.get_label() 969 elif event.artist in plot.get_legend().get_texts(): # is this a text item in the legend? 970 lbl = event.artist.get_text() 971 else: 972 #GSASIIpath.IPyBreak() 973 return 974 975 for l in plot.get_lines(): 976 if lbl == l.get_label(): 977 canvas.timer = wx.Timer() 978 canvas.timer.Bind(wx.EVT_TIMER, clearHighlight) 979 #GSASIIpath.IPyBreak() 980 canvas.timer.lineinfo = (l,l.get_marker(),l.get_markersize(),l.get_markeredgewidth()) 981 # highlight the selected item 982 if l.get_marker() == 'None': 983 l.set_marker('o') 984 else: 985 l.set_markersize(2*l.get_markersize()) 986 l.set_markeredgewidth(2*l.get_markeredgewidth()) 987 canvas.draw() 988 if delay > 0: 989 canvas.timer.Start(delay,oneShot=True) 990 break 991 else: 992 print('Warning: artist matching ',lbl,' not found') 993 994 def changePlotSettings(G2frame,Plot): 995 '''Code in development to allow changes to plot settings 996 prior to export of plot with "floppy disk" button 997 ''' 998 def RefreshPlot(*args,**kwargs): 999 '''Apply settings to the plot 1000 ''' 1001 Plot.figure.subplots_adjust(left=int(plotOpt['labelSize'])/100., 1002 bottom=int(plotOpt['labelSize'])/150., 1003 right=.98, 1004 top=1.-int(plotOpt['labelSize'])/200., 1005 hspace=0.0) 1006 for P in Plot.figure.axes: 1007 P.get_xaxis().get_label().set_fontsize(plotOpt['labelSize']) 1008 P.get_yaxis().get_label().set_fontsize(plotOpt['labelSize']) 1009 for l in P.get_xaxis().get_ticklabels(): 1010 l.set_fontsize(plotOpt['labelSize']) 1011 for l in P.get_yaxis().get_ticklabels(): 1012 l.set_fontsize(plotOpt['labelSize']) 1013 for l in P.lines: 1014 l.set_linewidth(plotOpt['lineWid']) 1015 P.get_xaxis().set_tick_params(width=plotOpt['lineWid']) 1016 P.get_yaxis().set_tick_params(width=plotOpt['lineWid']) 1017 for l in P.spines.values(): 1018 l.set_linewidth(plotOpt['lineWid']) 1019 1020 Plot.set_title(plotOpt['title'],fontsize=plotOpt['labelSize']) 1021 for i,P in enumerate(Plot.figure.axes): 1022 if not P.get_visible(): continue 1023 if i == 0: 1024 lbl = '' 1025 else: 1026 lbl = str(i) 1027 P.get_xaxis().set_label_text(plotOpt['xtitle'+lbl]) 1028 P.get_yaxis().set_label_text(plotOpt['ytitle'+lbl]) 1029 Plot.figure.canvas.draw() 1030 1031 txtChoices = [str(i) for i in range (8,26)] 1032 lwidChoices = ('0.5','0.7','1','1.5','2','2.5','3','4') 1033 dlg = wx.Dialog(G2frame.plotFrame, 1034 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER) 1035 vbox = wx.BoxSizer(wx.VERTICAL) 1036 hbox = wx.BoxSizer(wx.HORIZONTAL) 1037 hbox.Add(wx.StaticText(dlg,wx.ID_ANY,'Text size'),0,wx.ALL) 1038 w = G2G.G2ChoiceButton(dlg,txtChoices,None,None,plotOpt,'labelSize',RefreshPlot, 1039 size=(50,-1)) 1040 hbox.Add(w,0,wx.ALL|wx.ALIGN_CENTER) 1041 vbox.Add(hbox,0,wx.ALL|wx.EXPAND) 1042 1043 vbox.Add((1,5)) 1044 hbox = wx.BoxSizer(wx.HORIZONTAL) 1045 hbox.Add(wx.StaticText(dlg,wx.ID_ANY,' Line widths'),0,wx.ALL) 1046 w = G2G.G2ChoiceButton(dlg,lwidChoices,None,None,plotOpt,'lineWid',RefreshPlot, 1047 size=(50,-1)) 1048 hbox.Add(w,0,wx.ALL|wx.ALIGN_CENTER) 1049 vbox.Add(hbox,0,wx.ALL|wx.EXPAND) 1050 1051 vbox.Add((1,5)) 1052 hbox = wx.BoxSizer(wx.HORIZONTAL) 1053 hbox.Add(wx.StaticText(dlg,wx.ID_ANY,' Title'),0,wx.ALL) 1054 plotOpt['title'] = Plot.get_title() 1055 w = G2G.ValidatedTxtCtrl(dlg,plotOpt,'title',OnLeave=RefreshPlot, 1056 size=(200,-1),notBlank=False) 1057 hbox.Add(w,0,wx.ALL|wx.ALIGN_CENTER) 1058 vbox.Add(hbox,0,wx.ALL|wx.EXPAND) 1059 1060 for i,P in enumerate(Plot.figure.axes): 1061 if not P.get_visible(): continue 1062 if i == 0: 1063 lbl = '' 1064 else: 1065 lbl = str(i) 1066 vbox.Add((1,5)) 1067 hbox = wx.BoxSizer(wx.HORIZONTAL) 1068 hbox.Add(wx.StaticText(dlg,wx.ID_ANY,' x label '+lbl),0,wx.ALL) 1069 plotOpt['xtitle'+lbl] = P.get_xaxis().get_label_text() 1070 w = G2G.ValidatedTxtCtrl(dlg,plotOpt,'xtitle'+lbl,OnLeave=RefreshPlot, 1071 size=(200,-1),notBlank=False) 1072 hbox.Add(w,0,wx.ALL|wx.ALIGN_CENTER) 1073 vbox.Add(hbox,0,wx.ALL|wx.EXPAND) 1074 1075 vbox.Add((1,5)) 1076 hbox = wx.BoxSizer(wx.HORIZONTAL) 1077 hbox.Add(wx.StaticText(dlg,wx.ID_ANY,' y label '+lbl),0,wx.ALL) 1078 plotOpt['ytitle'+lbl] = P.get_yaxis().get_label_text() 1079 w = G2G.ValidatedTxtCtrl(dlg,plotOpt,'ytitle'+lbl,OnLeave=RefreshPlot, 1080 size=(200,-1),notBlank=False) 1081 hbox.Add(w,0,wx.ALL|wx.ALIGN_CENTER) 1082 vbox.Add(hbox,0,wx.ALL|wx.EXPAND) 1083 1084 vbox.Add((1,10),1,wx.ALL|wx.EXPAND,1) 1085 hbox = wx.BoxSizer(wx.HORIZONTAL) 1086 OKbtn = wx.Button(dlg, wx.ID_OK) 1087 OKbtn.Bind(wx.EVT_BUTTON,lambda event:dlg.EndModal(wx.ID_OK)) 1088 hbox.Add((-1,-1),1,wx.ALL|wx.EXPAND,1) 1089 hbox.Add(OKbtn) 1090 hbox.Add((-1,-1),1,wx.ALL|wx.EXPAND,1) 1091 vbox.Add(hbox,1,wx.ALL|wx.EXPAND,1) 1092 1093 dlg.SetSizer(vbox) 1094 vbox.Fit(dlg) 1095 #dlg.Show() 1096 RefreshPlot() 1097 dlg.ShowModal() 885 1098 ##### PlotSngl ################################################################ 886 1099 def PlotSngl(G2frame,newPlot=False,Data=None,hklRef=None,Title=''): … … 10754 10967 wx.CallAfter(Draw,'main') 10755 10968 10756 def PlotFPAconvolutors(G2frame,NISTpk):10757 '''Plot the convolutions used for the current peak computed with10758 :func:`GSASIIfpaGUI.doFPAcalc`10759 '''10760 import NIST_profile as FP10761 new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('FPA convolutors','mpl')10762 Page.SetToolTipString('')10763 cntr = NISTpk.twotheta_window_center_deg10764 Plot.set_title('Peak convolution functions @ 2theta={:.3f}'.format(cntr))10765 Plot.set_xlabel(r'$\Delta 2\theta, deg$',fontsize=14)10766 Plot.set_ylabel(r'Intensity (arbitrary)',fontsize=14)10767 # refColors=['b','r','c','g','m','k']10768 refColors = ['xkcd:blue','xkcd:red','xkcd:green','xkcd:cyan','xkcd:magenta','xkcd:black',10769 'xkcd:pink','xkcd:brown','xkcd:teal','xkcd:orange','xkcd:grey','xkcd:violet',]10770 ttmin = ttmax = 010771 #GSASIIpath.IPyBreak()10772 i = -110773 for conv in NISTpk.convolvers:10774 if 'smoother' in conv: continue10775 if 'crystallite_size' in conv: continue10776 f = NISTpk.convolver_funcs[conv]()10777 if f is None: continue10778 i += 110779 FFT = FP.best_irfft(f)10780 if f[1].real > 0: FFT = np.roll(FFT,int(len(FFT)/2.))10781 FFT /= FFT.max()10782 ttArr = np.linspace(-NISTpk.twotheta_window_fullwidth_deg/2,10783 NISTpk.twotheta_window_fullwidth_deg/2,len(FFT))10784 ttmin = min(ttmin,ttArr[np.argmax(FFT>.005)])10785 ttmax = max(ttmax,ttArr[::-1][np.argmax(FFT[::-1]>.005)])10786 color = refColors[i%len(refColors)]10787 Plot.plot(ttArr,FFT,color,label=conv[5:])10788 legend = Plot.legend(loc='best')10789 SetupLegendPick(legend,new)10790 Page.toolbar.push_current()10791 Plot.set_xlim((ttmin,ttmax))10792 Page.toolbar.push_current()10793 Page.ToolBarDraw()10794 Page.canvas.draw()10795 10796 def SetupLegendPick(legend,new,delay=5):10797 mplv = eval(mpl.__version__.replace('.',','))10798 legend.delay = delay*1000 # Hold time in ms for clear; 0 == forever10799 for line in legend.get_lines():10800 if mplv[0] >= 3 and mplv[1] >= 3:10801 line.set_pickradius(4)10802 else:10803 line.set_picker(4)10804 # bug: legend items with single markers don't seem to respond to a "pick"10805 #GSASIIpath.IPyBreak()10806 for txt in legend.get_texts():10807 try: # as of MPL 3.3.2 this has not changed10808 txt.set_picker(4)10809 except AttributeError:10810 txt.set_pickradius(4)10811 if new:10812 legend.figure.canvas.mpl_connect('pick_event',onLegendPick)10813 10814 def onLegendPick(event):10815 '''When a line in the legend is selected, find the matching line10816 in the plot and then highlight it by adding/enlarging markers.10817 Set up a timer to make a reset after delay selected in SetupLegendPick10818 '''10819 def clearHighlight(event):10820 if not canvas.timer: return10821 l,lm,lms,lmw = canvas.timer.lineinfo10822 l.set_marker(lm)10823 l.set_markersize(lms)10824 l.set_markeredgewidth(lmw)10825 canvas.draw()10826 canvas.timer = None10827 canvas = event.artist.get_figure().canvas10828 if not hasattr(canvas,'timer'): canvas.timer = None10829 plot = event.artist.get_figure().get_axes()[0]10830 if hasattr(plot.get_legend(),'delay'):10831 delay = plot.get_legend().delay10832 if canvas.timer: # clear previous highlight10833 if delay > 0: canvas.timer.Stop()10834 clearHighlight(None)10835 #if delay <= 0: return # use this in place of return10836 # so that the next selected item is automatically highlighted (except when delay is 0)10837 return10838 if event.artist in plot.get_legend().get_lines(): # is this an artist item in the legend?10839 lbl = event.artist.get_label()10840 elif event.artist in plot.get_legend().get_texts(): # is this a text item in the legend?10841 lbl = event.artist.get_text()10842 else:10843 #GSASIIpath.IPyBreak()10844 return10845 10846 for l in plot.get_lines():10847 if lbl == l.get_label():10848 canvas.timer = wx.Timer()10849 canvas.timer.Bind(wx.EVT_TIMER, clearHighlight)10850 #GSASIIpath.IPyBreak()10851 canvas.timer.lineinfo = (l,l.get_marker(),l.get_markersize(),l.get_markeredgewidth())10852 # highlight the selected item10853 if l.get_marker() == 'None':10854 l.set_marker('o')10855 else:10856 l.set_markersize(2*l.get_markersize())10857 l.set_markeredgewidth(2*l.get_markeredgewidth())10858 canvas.draw()10859 if delay > 0:10860 canvas.timer.Start(delay,oneShot=True)10861 break10862 else:10863 print('Warning: artist matching ',lbl,' not found')10864 10865 def changePlotSettings(G2frame,Plot):10866 '''Code in development to allow changes to plot settings10867 prior to export of plot with "floppy disk" button10868 '''10869 def RefreshPlot(*args,**kwargs):10870 '''Apply settings to the plot10871 '''10872 Plot.figure.subplots_adjust(left=int(plotOpt['labelSize'])/100.,10873 bottom=int(plotOpt['labelSize'])/150.,10874 right=.98,10875 top=1.-int(plotOpt['labelSize'])/200.,10876 hspace=0.0)10877 for P in Plot.figure.axes:10878 P.get_xaxis().get_label().set_fontsize(plotOpt['labelSize'])10879 P.get_yaxis().get_label().set_fontsize(plotOpt['labelSize'])10880 for l in P.get_xaxis().get_ticklabels():10881 l.set_fontsize(plotOpt['labelSize'])10882 for l in P.get_yaxis().get_ticklabels():10883 l.set_fontsize(plotOpt['labelSize'])10884 for l in P.lines:10885 l.set_linewidth(plotOpt['lineWid'])10886 P.get_xaxis().set_tick_params(width=plotOpt['lineWid'])10887 P.get_yaxis().set_tick_params(width=plotOpt['lineWid'])10888 for l in P.spines.values():10889 l.set_linewidth(plotOpt['lineWid'])10890 10891 Plot.set_title(plotOpt['title'],fontsize=plotOpt['labelSize'])10892 for i,P in enumerate(Plot.figure.axes):10893 if not P.get_visible(): continue10894 if i == 0:10895 lbl = ''10896 else:10897 lbl = str(i)10898 P.get_xaxis().set_label_text(plotOpt['xtitle'+lbl])10899 P.get_yaxis().set_label_text(plotOpt['ytitle'+lbl])10900 Plot.figure.canvas.draw()10901 10902 txtChoices = [str(i) for i in range (8,26)]10903 lwidChoices = ('0.5','0.7','1','1.5','2','2.5','3','4')10904 dlg = wx.Dialog(G2frame.plotFrame,10905 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER)10906 vbox = wx.BoxSizer(wx.VERTICAL)10907 hbox = wx.BoxSizer(wx.HORIZONTAL)10908 hbox.Add(wx.StaticText(dlg,wx.ID_ANY,'Text size'),0,wx.ALL)10909 w = G2G.G2ChoiceButton(dlg,txtChoices,None,None,plotOpt,'labelSize',RefreshPlot,10910 size=(50,-1))10911 hbox.Add(w,0,wx.ALL|wx.ALIGN_CENTER)10912 vbox.Add(hbox,0,wx.ALL|wx.EXPAND)10913 10914 vbox.Add((1,5))10915 hbox = wx.BoxSizer(wx.HORIZONTAL)10916 hbox.Add(wx.StaticText(dlg,wx.ID_ANY,' Line widths'),0,wx.ALL)10917 w = G2G.G2ChoiceButton(dlg,lwidChoices,None,None,plotOpt,'lineWid',RefreshPlot,10918 size=(50,-1))10919 hbox.Add(w,0,wx.ALL|wx.ALIGN_CENTER)10920 vbox.Add(hbox,0,wx.ALL|wx.EXPAND)10921 10922 vbox.Add((1,5))10923 hbox = wx.BoxSizer(wx.HORIZONTAL)10924 hbox.Add(wx.StaticText(dlg,wx.ID_ANY,' Title'),0,wx.ALL)10925 plotOpt['title'] = Plot.get_title()10926 w = G2G.ValidatedTxtCtrl(dlg,plotOpt,'title',OnLeave=RefreshPlot,10927 size=(200,-1),notBlank=False)10928 hbox.Add(w,0,wx.ALL|wx.ALIGN_CENTER)10929 vbox.Add(hbox,0,wx.ALL|wx.EXPAND)10930 10931 for i,P in enumerate(Plot.figure.axes):10932 if not P.get_visible(): continue10933 if i == 0:10934 lbl = ''10935 else:10936 lbl = str(i)10937 vbox.Add((1,5))10938 hbox = wx.BoxSizer(wx.HORIZONTAL)10939 hbox.Add(wx.StaticText(dlg,wx.ID_ANY,' x label '+lbl),0,wx.ALL)10940 plotOpt['xtitle'+lbl] = P.get_xaxis().get_label_text()10941 w = G2G.ValidatedTxtCtrl(dlg,plotOpt,'xtitle'+lbl,OnLeave=RefreshPlot,10942 size=(200,-1),notBlank=False)10943 hbox.Add(w,0,wx.ALL|wx.ALIGN_CENTER)10944 vbox.Add(hbox,0,wx.ALL|wx.EXPAND)10945 10946 vbox.Add((1,5))10947 hbox = wx.BoxSizer(wx.HORIZONTAL)10948 hbox.Add(wx.StaticText(dlg,wx.ID_ANY,' y label '+lbl),0,wx.ALL)10949 plotOpt['ytitle'+lbl] = P.get_yaxis().get_label_text()10950 w = G2G.ValidatedTxtCtrl(dlg,plotOpt,'ytitle'+lbl,OnLeave=RefreshPlot,10951 size=(200,-1),notBlank=False)10952 hbox.Add(w,0,wx.ALL|wx.ALIGN_CENTER)10953 vbox.Add(hbox,0,wx.ALL|wx.EXPAND)10954 10955 vbox.Add((1,10),1,wx.ALL|wx.EXPAND,1)10956 hbox = wx.BoxSizer(wx.HORIZONTAL)10957 OKbtn = wx.Button(dlg, wx.ID_OK)10958 OKbtn.Bind(wx.EVT_BUTTON,lambda event:dlg.EndModal(wx.ID_OK))10959 hbox.Add((-1,-1),1,wx.ALL|wx.EXPAND,1)10960 hbox.Add(OKbtn)10961 hbox.Add((-1,-1),1,wx.ALL|wx.EXPAND,1)10962 vbox.Add(hbox,1,wx.ALL|wx.EXPAND,1)10963 10964 dlg.SetSizer(vbox)10965 vbox.Fit(dlg)10966 #dlg.Show()10967 RefreshPlot()10968 dlg.ShowModal() -
trunk/fprime.py
r4789 r4837 365 365 fppsP3 = np.array(Fpps[3]) 366 366 self.ax.plot(fppsP1,fppsP2,Color,label=Fpps[0]+" f '") 367 self.ax.plot(fppsP1,fppsP3,Color,l abel=Fpps[0]+' f "')367 self.ax.plot(fppsP1,fppsP3,Color,linestyle='dashed',label=Fpps[0]+' f "') 368 368 if self.ifWave: 369 369 self.ax.set_xlabel(r'$\mathsf{\lambda, \AA}$',fontsize=14) … … 423 423 ffop = np.array(ffo) 424 424 ffp = np.array(ff) 425 self.bx.plot(Xp,ffop,Color +'--',label=Els+" f")425 self.bx.plot(Xp,ffop,Color,linestyle='dashed',label=Els+" f") 426 426 self.bx.plot(Xp,ffp,Color,label=Els+" f+f'") 427 427 if self.Elems:
Note: See TracChangeset
for help on using the changeset viewer.