Changeset 3898 for trunk/GSASIIplot.py


Ignore:
Timestamp:
Apr 14, 2019 10:19:02 PM (3 years ago)
Author:
toby
Message:

Add manual scaling of plots, allow changes to plot labels size etc, & remove zero and diff from multiplot

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIplot.py

    r3895 r3898  
    253253plotOpt['phaseLabels']  = {}
    254254plotOpt['fmtChoices']  = {}
     255plotOpt['lineWid'] = '1'
    255256
    256257def MPLsubplots(figure, nrows=1, ncols=1, sharex=False, sharey=False,
     
    18191820            if not G2frame.Weight and 'PWDR' in plottype:
    18201821                G2frame.SinglePlot = True
     1822            elif 'PWDR' in plottype: # Turning on Weight plot clears previous limits
     1823                G2frame.FixedLimits['dylims'] = ['','']               
    18211824            newPlot = True
    18221825        elif event.key == 'e' and plottype in ['SASD','REFD']:
     
    25092512        PlotPatterns(G2frame,plotType=plottype,extraKeys=extraKeys)
    25102513        G2frame.itemPicked = None
    2511        
     2514
     2515    def onSetPlotLim(event):
     2516        '''Specify plot limits manually
     2517        '''
     2518        def onChecked(event):
     2519            try:
     2520                i = cbox.index(event.EventObject)
     2521                showChecked(i)
     2522            except:
     2523                pass
     2524        def showChecked(i):
     2525            checked = cbox[i].GetValue()
     2526            if not checked:
     2527                # fake out validation to avoid ugly yellow
     2528                dbox[i].invalid = False
     2529                dbox[i]._IndicateValidity()
     2530            else: # reset validation
     2531                dbox[i].SetValue(dbox[i].GetValue())
     2532            dbox[i].Enable(checked)
     2533        dlg = wx.Dialog(G2frame.plotFrame,
     2534                    style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER)
     2535        vbox = wx.BoxSizer(wx.VERTICAL)
     2536        vbox.Add(wx.StaticText(dlg,wx.ID_ANY,
     2537                'Set Plot limits'
     2538                ),0,wx.ALL)
     2539        gsizer = wx.FlexGridSizer(cols=5,hgap=2,vgap=2)
     2540        gsizer.Add(wx.StaticText(dlg,wx.ID_ANY,' '),0,wx.ALL)
     2541        gsizer.Add(wx.StaticText(dlg,wx.ID_ANY,'use'),0,wx.ALL)
     2542        gsizer.Add(wx.StaticText(dlg,wx.ID_ANY,'  min'),0,wx.ALL)
     2543        gsizer.Add(wx.StaticText(dlg,wx.ID_ANY,'use'),0,wx.ALL)
     2544        gsizer.Add(wx.StaticText(dlg,wx.ID_ANY,'  max'),0,wx.ALL)
     2545        cbox = []
     2546        dbox = []
     2547        lblkeys = [(' x-axis ','xlims'),(' y-axis ','ylims')]
     2548        if G2frame.Weight:
     2549            lblkeys += [('(obs-calc)/sig ','dylims')]
     2550        for lbl,key in lblkeys:
     2551            gsizer.Add(wx.StaticText(dlg,wx.ID_ANY,lbl),0,wx.ALL)
     2552            for i in range(2):
     2553                cbox.append(G2G.G2CheckBox(dlg,'',G2frame.UseLimits[key],i,
     2554                                        OnChange=onChecked))
     2555                dbox.append(G2G.ValidatedTxtCtrl(dlg,G2frame.FixedLimits[key],i,
     2556                                                typeHint=float))
     2557                gsizer.Add(cbox[-1])
     2558                gsizer.Add(dbox[-1])
     2559                showChecked(-1)
     2560        vbox.Add(gsizer)
     2561        vbox.Add((10,10),1,wx.ALL|wx.EXPAND,1)
     2562        hbox = wx.BoxSizer(wx.HORIZONTAL)
     2563        OKbtn = wx.Button(dlg, wx.ID_OK)
     2564        OKbtn.Bind(wx.EVT_BUTTON,lambda event:dlg.EndModal(wx.ID_OK))
     2565        hbox.Add((-1,-1),1,wx.ALL|wx.EXPAND,1)
     2566        hbox.Add(OKbtn)
     2567        hbox.Add((-1,-1),1,wx.ALL|wx.EXPAND,1)
     2568        vbox.Add(hbox,1,wx.ALL|wx.EXPAND,1)
     2569        dlg.SetSizer(vbox)
     2570        vbox.Fit(dlg)
     2571        dlg.ShowModal()
     2572        dlg.Destroy()
     2573        # apply values
     2574        Page.toolbar.push_current()
     2575        CurLims = {}
     2576        CurLims['xlims'] = list(Plot.get_xlim())
     2577        if G2frame.Weight:
     2578            CurLims['ylims'] = list(Page.figure.axes[1].get_ylim())
     2579            CurLims['dylims'] = list(Page.figure.axes[2].get_ylim())
     2580        else:
     2581            CurLims['ylims'] = list(Plot.get_ylim())
     2582            CurLims['dylims'] = [0,0]
     2583        for var in 'xlims','ylims','dylims':
     2584            for i in range(2):
     2585                if not G2frame.UseLimits[var][i]: continue
     2586                try:
     2587                    CurLims[var][i] = float(G2frame.FixedLimits[var][i])
     2588                except:
     2589                    pass
     2590        Plot.set_xlim(CurLims['xlims'])
     2591        if G2frame.Weight:
     2592            Page.figure.axes[1].set_ylim(CurLims['ylims'])
     2593            Page.figure.axes[2].set_ylim(CurLims['dylims'])
     2594        else:
     2595            Plot.set_ylim(CurLims['ylims'])
     2596        Plot.figure.canvas.draw()
     2597        #GSASIIpath.IPyBreak()
     2598       
     2599    def onPlotFormat(event):
     2600        changePlotSettings(G2frame,Plot)
    25122601    #=====================================================================================
    25132602    # beginning PlotPatterns execution
     
    25362625            'refDelt':0.1*Ymax,})
    25372626#end patch
     2627    try:
     2628        G2frame.FixedLimits
     2629    except:
     2630        G2frame.FixedLimits = {'xlims':['',''],'ylims':['',''],
     2631                                       'dylims':['','']}
     2632    try:
     2633        G2frame.UseLimits
     2634    except:
     2635        G2frame.UseLimits = {'xlims':[False,False],'ylims':[False,False],
     2636                                       'dylims':[False,False]}
    25382637    if not new:
    25392638        G2frame.xylim = limits
     
    25652664        G2frame.Bind(wx.EVT_MENU, onMoveTopTick, id=G2frame.dataWindow.moveTickLoc.GetId())
    25662665        G2frame.Bind(wx.EVT_MENU, onMoveTickSpace, id=G2frame.dataWindow.moveTickSpc.GetId())
     2666        G2frame.Bind(wx.EVT_MENU, onSetPlotLim, id=G2frame.dataWindow.setPlotLim.GetId())
     2667        G2frame.Bind(wx.EVT_MENU, onPlotFormat, id=G2frame.dataWindow.setPlotFmt.GetId())
    25672668        G2frame.dataWindow.moveDiffCurve.Enable(False)
    25682669        G2frame.dataWindow.moveTickLoc.Enable(False)
     
    29623063                    DifLine = Plot1.plot(X[Ibeg:Ifin],DZ[Ibeg:Ifin],colors[3],picker=1.,label='_diff')                    #(Io-Ic)/sig(Io)
    29633064                    Plot1.axhline(0.,color='k')
    2964                     Plot1.set_ylim(bottom=np.min(DZ[Ibeg:Ifin])*1.2,top=np.max(DZ[Ibeg:Ifin])*1.2) 
     3065                    CurLims = [np.min(DZ[Ibeg:Ifin])*1.2,np.max(DZ[Ibeg:Ifin])*1.2]
     3066                    for i in range(2):
     3067                        if not G2frame.UseLimits['dylims'][i]: continue
     3068                        try:
     3069                            CurLims[i] = float(G2frame.FixedLimits['dylims'][i])
     3070                        except:
     3071                            pass
     3072                    Plot1.set_ylim(CurLims)
    29653073                if Page.plotStyle['logPlot']:
    29663074                    if 'PWDR' in plottype:
     
    29983106                            Plot.plot(X,YB,colors[0]+pP,picker=3.,clip_on=Clip_on,label='_obs')
    29993107                            Plot.plot(X,ZB,colors[1],picker=False,label='_calc')
    3000                     if 'PWDR' in plottype:
     3108                    if 'PWDR' in plottype and G2frame.SinglePlot:
    30013109                        Plot.plot(X,W,colors[2],picker=False,label='_bkg')                 #Ib
    30023110                        if not G2frame.Weight: DifLine = Plot.plot(X,D,colors[3],picker=1.,label='_diff')                 #Io-Ic
     
    62076315    else:
    62086316        label = 'Parametric fit #'+str(fitnum+1)
    6209 #    def PublishPlot(event):
    6210 #        print('Page=',Page)
    6211 #        print('Plot=',Plot)
    6212 #        GSASIIpath.IPyBreak()
    6213 #    new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab(label,'mpl',
    6214 #                                    publish=PublishPlot)
    62156317    new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab(label,'mpl')
    62166318    if not new:
     
    96089710            print('Warning: artist matching ',lbl,' not found')
    96099711   
     9712def changePlotSettings(G2frame,Plot):
     9713    '''Code in development to allow changes to plot settings
     9714    prior to export of plot with "floppy disk" button
     9715    '''
     9716    def RefreshPlot(*args,**kwargs):
     9717        '''Apply settings to the plot
     9718        '''
     9719        Plot.get_xaxis().get_label().set_fontsize(plotOpt['labelSize'])
     9720        Plot.get_yaxis().get_label().set_fontsize(plotOpt['labelSize'])
     9721        for l in Plot.get_xaxis().get_ticklabels():
     9722            l.set_fontsize(plotOpt['labelSize'])
     9723        for l in Plot.get_yaxis().get_ticklabels():
     9724            l.set_fontsize(plotOpt['labelSize'])
     9725        Plot.figure.subplots_adjust(left=int(plotOpt['labelSize'])/100.,
     9726                        bottom=int(plotOpt['labelSize'])/150.,
     9727                        right=.98,
     9728                        top=1.-int(plotOpt['labelSize'])/200.,
     9729                        hspace=0.0)
     9730        for l in Plot.lines:
     9731            l.set_linewidth(plotOpt['lineWid'])
     9732        Plot.get_xaxis().set_tick_params(width=plotOpt['lineWid'])
     9733        Plot.get_yaxis().set_tick_params(width=plotOpt['lineWid'])
     9734        for l in Plot.spines.values():
     9735            l.set_linewidth(plotOpt['lineWid'])
     9736        Plot.set_title(plotOpt['title'])
     9737        Plot.get_xaxis().set_label_text(plotOpt['xtitle'])
     9738        Plot.get_yaxis().set_label_text(plotOpt['ytitle'])           
     9739        Plot.figure.canvas.draw()
     9740
     9741    txtChoices = [str(i) for i in range (8,26)]
     9742    lwidChoices = ('0.5','0.7','1','1.5','2','2.5','3','4')
     9743    dlg = wx.Dialog(G2frame.plotFrame,
     9744                style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER)
     9745    vbox = wx.BoxSizer(wx.VERTICAL)
     9746    hbox = wx.BoxSizer(wx.HORIZONTAL)
     9747    hbox.Add(wx.StaticText(dlg,wx.ID_ANY,'Text size'),0,wx.ALL)
     9748    w = G2G.G2ChoiceButton(dlg,txtChoices,None,None,plotOpt,'labelSize',RefreshPlot,
     9749                                   size=(50,-1))
     9750    hbox.Add(w,0,wx.ALL|wx.ALIGN_CENTER)
     9751    vbox.Add(hbox,0,wx.ALL|wx.EXPAND)
     9752   
     9753    vbox.Add((1,5))
     9754    hbox = wx.BoxSizer(wx.HORIZONTAL)
     9755    hbox.Add(wx.StaticText(dlg,wx.ID_ANY,' Line widths'),0,wx.ALL)
     9756    w = G2G.G2ChoiceButton(dlg,lwidChoices,None,None,plotOpt,'lineWid',RefreshPlot,
     9757            size=(50,-1))
     9758    hbox.Add(w,0,wx.ALL|wx.ALIGN_CENTER)
     9759    vbox.Add(hbox,0,wx.ALL|wx.EXPAND)
     9760
     9761    vbox.Add((1,5))
     9762    hbox = wx.BoxSizer(wx.HORIZONTAL)
     9763    hbox.Add(wx.StaticText(dlg,wx.ID_ANY,' Title'),0,wx.ALL)
     9764    plotOpt['title'] = Plot.get_title()
     9765    w = G2G.ValidatedTxtCtrl(dlg,plotOpt,'title',OnLeave=RefreshPlot,
     9766                                 size=(200,-1),notBlank=False)
     9767    hbox.Add(w,0,wx.ALL|wx.ALIGN_CENTER)
     9768    vbox.Add(hbox,0,wx.ALL|wx.EXPAND)
     9769
     9770    vbox.Add((1,5))
     9771    hbox = wx.BoxSizer(wx.HORIZONTAL)
     9772    hbox.Add(wx.StaticText(dlg,wx.ID_ANY,' x label'),0,wx.ALL)
     9773    plotOpt['xtitle'] = Plot.get_xaxis().get_label_text()
     9774    w = G2G.ValidatedTxtCtrl(dlg,plotOpt,'xtitle',OnLeave=RefreshPlot,
     9775                                 size=(200,-1),notBlank=False)
     9776    hbox.Add(w,0,wx.ALL|wx.ALIGN_CENTER)
     9777    vbox.Add(hbox,0,wx.ALL|wx.EXPAND)
     9778   
     9779    vbox.Add((1,5))
     9780    hbox = wx.BoxSizer(wx.HORIZONTAL)
     9781    hbox.Add(wx.StaticText(dlg,wx.ID_ANY,' y label'),0,wx.ALL)
     9782    plotOpt['ytitle'] = Plot.get_yaxis().get_label_text()
     9783    w = G2G.ValidatedTxtCtrl(dlg,plotOpt,'ytitle',OnLeave=RefreshPlot,
     9784                                 size=(200,-1),notBlank=False)
     9785    hbox.Add(w,0,wx.ALL|wx.ALIGN_CENTER)
     9786    vbox.Add(hbox,0,wx.ALL|wx.EXPAND)
     9787   
     9788    vbox.Add((1,10),1,wx.ALL|wx.EXPAND,1)
     9789    hbox = wx.BoxSizer(wx.HORIZONTAL)
     9790    OKbtn = wx.Button(dlg, wx.ID_OK)
     9791    OKbtn.Bind(wx.EVT_BUTTON,lambda event:dlg.EndModal(wx.ID_OK))
     9792    hbox.Add((-1,-1),1,wx.ALL|wx.EXPAND,1)
     9793    hbox.Add(OKbtn)
     9794    hbox.Add((-1,-1),1,wx.ALL|wx.EXPAND,1)
     9795    vbox.Add(hbox,1,wx.ALL|wx.EXPAND,1)
     9796       
     9797    dlg.SetSizer(vbox)
     9798    vbox.Fit(dlg)
     9799    #dlg.Show()
     9800    RefreshPlot()
     9801    dlg.ShowModal()
Note: See TracChangeset for help on using the changeset viewer.