Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to interactively find and annotate local max (peaks) in matplotlib?
    primarykey
    data
    text
    <p>I'm trying to analyze some spectra for finding spectroscopic peaks, I've writen this simple code to find the max Y value (the peak) between two X data by clicking before and after the peak that I want to find. This works and I can get the coordinate of the peak but I would like to automatically annotate the peak found.</p> <pre><code>import matplotlib.pyplot as plt X=[1,2,3,4,5,6,7,8,9,10] Y=[1,1,1,2,10,2,1,1,1,1] fig = plt.figure() ax = fig.add_subplot(111) ax.plot(X,Y,label="prova") #plot the function #plt.legend(loc=1, ncol=1, shadow=True) plt.xlim(min(X) * 0.9, max(X) * 1.1) plt.ylim(min(Y) * 0.9, max(Y) * 1.1) plt.ylabel(r'Y axis') plt.xlabel(r'X axis') Diz=dict(zip(X,Y)) #create a dictionary that associate X with Y Interval=[] #interval where the user search for peaks PeaksList=[] #list of peaks found def onclick(event): print 'First limit at =%f'%(event.xdata) Interval.append(event.xdata) if len(Interval)%2==0: a=Interval[-2] b=Interval[-1] if b&lt;a: #if the user select first the highest value these statements filp it! A=b B=a else: A=a B=b #find the max Y value: the peak! peakY=0 #max Y value piccoX=0 #value of the X associate to the peak for i in [ j for j in X if A&lt;j&lt;B] : if Diz[i]&gt;peakY: peakY=Diz[i] piccoX=i print "Interval: %f - %f Peak at: %f " %(a,b,piccoX) PeaksList.append([piccoX,peakY]) ax.annotate("picco", xy=(piccoX,peakY), xycoords='data', xytext=(-50, 30), textcoords='offset points', arrowprops=dict(arrowstyle="-&gt;") ) plt.show() cid = fig.canvas.mpl_connect('button_press_event', onclick) </code></pre> <p>This is what I would like to have after the second click: <img src="https://i.stack.imgur.com/0lEw6.png" alt="enter image description here"></p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload