Box and Whisker Plot of selected data
thiago.nogueira
I am a basic user of Igor, but unfortunately I have no skill in programing.
I use Igor to calculate percentile and make box and whisker plot for the whole dataset. But, I was wondering if is possible I use the "Wave Percentile" to calculate percentile for an interval. For instance, as in data attached, can I calculate de percentile for data at each day, I mean, percentile for data of 24h, for month, etc..
Many thanks
Thiago
Yes, you can use the fWavePercentile function, as long as you select the data that you want. The Extract function may be your best friend.
Below is a code to calculate the hourly distribution of a dataset (for a box and whisker plot, p1 to p5 should be 10, 25, 50, 75 and 90)
Hope this helps a bit
Cheers
J-E
wave timeline, data
variable p1,p2,p3,p4,p5
string ListOfPercentiles=num2str(p1)+";"+num2str(p2)+";"+num2str(p3)+";"+num2str(p4)+";"+num2str(p5)
Make/O/N=24 W_p1,W_p2,W_p3,W_p4,W_p5
Make/O/N=24 temp_hour=p
Make/O/N=(numpnts(data)) hour_data
Make/O/T/N=24 txtWave
txtWave=num2str(p)
variable i
for (i=0;i<numpnts(data);i+=1)
hour_data[i]=determinehour(timeline[i])
endfor
string p1_str="temp_p_"+num2str(p1)
string p2_str="temp_p_"+num2str(p2)
string p3_str="temp_p_"+num2str(p3)
string p4_str="temp_p_"+num2str(p4)
string p5_str="temp_p_"+num2str(p5)
for (i=0;i<24;i+=1)
Extract/O data,temp,hour_data==i
WaveTransform zapNaNs, temp
fWavePercentile("temp", ListOfPercentiles, "temp_p", 0, 0, 0)
wave temp_p1=$p1_str
wave temp_p2=$p2_str
wave temp_p3=$p3_str
wave temp_p4=$p4_str
wave temp_p5=$p5_str
W_p1[i]=temp_p1[0]
W_p2[i]=temp_p2[0]
W_p3[i]=temp_p3[0]
W_p4[i]=temp_p4[0]
W_p5[i]=temp_p5[0]
endfor
Display W_p5,W_p4,W_p3,W_p2,W_p1 vs txtWave
ModifyGraph mode(W_p1)=3,marker(W_p1)=9,rgb(W_p1)=(0,0,0),mode(W_p2)=1
ModifyGraph toMode(W_p2)=1,rgb(W_p2)=(0,0,0),toMode(W_p3)=1,toMode(W_p4)=1
ModifyGraph mode(W_p5)=8,marker(W_p5)=9,rgb(W_p5)=(0,0,0)
ModifyGraph toMode(W_p5)=1
ModifyGraph rgb(W_p4)=(43520,43520,43520),rgb(W_p3)=(43520,43520,43520)
End Function
Function Determinehour(dt)
Variable dt // Input date/time value
Variable time = mod(dt, 24*60*60) // Get the time component of the date/time
return trunc(time/(60*60))
End
On your dataset, it gives the enclosed image.
May 3, 2017 at 12:31 am - Permalink
Dear J-E, many thanks for your reply.
I am trying to run the function Diurnal_distrib(timeline,data,p1,p2,p3,p4,p5), but the sintax error appears: expected wave name. Should I create timeline and data wave before? This is not clear for me...
This diurnal distribution will be very useful for me, but I was thinking about the calculation of percentile for each day, as in figure attached. I did this manually, and this took me many efforts. What I should change in this procedure?
Thank you again.
Thiago
May 3, 2017 at 08:19 am - Permalink