Blame demo/violinplot.dem

Packit 0986c0
#
Packit 0986c0
# Various ways of displaying distribution of y values in a data file
Packit 0986c0
# 1) Violin plots (bee swarm with large number of points)
Packit 0986c0
# 2) Gaussian jitter
Packit 0986c0
# 3) Random jitter
Packit 0986c0
# 4) kernel density
Packit 0986c0
#
Packit 0986c0
Packit 0986c0
# Generate a reusable set of data points from a mixture of Gaussians
Packit 0986c0
nsamp = 3000 
Packit 0986c0
set print $viol1
Packit 0986c0
do for [i=1:nsamp] {
Packit 0986c0
    y = (i%4 == 0) ? 300. +  70.*invnorm(rand(0)) \
Packit 0986c0
      : (i%4 == 1) ? 400. +  10.*invnorm(rand(0)) \
Packit 0986c0
      :              120. +  40.*invnorm(rand(0))
Packit 0986c0
    print sprintf(" 35.0 %8.5g", y)
Packit 0986c0
}
Packit 0986c0
unset print
Packit 0986c0
Packit 0986c0
set print $viol2
Packit 0986c0
do for [i=1:nsamp] {
Packit 0986c0
    y = (i%4 == 0) ? 300. +  70.*invnorm(rand(0)) \
Packit 0986c0
      : (i%4 == 1) ? 250. +  10.*invnorm(rand(0)) \
Packit 0986c0
      :               70. +  20.*invnorm(rand(0))
Packit 0986c0
    print sprintf(" 34.0 %8.5g", y)
Packit 0986c0
}
Packit 0986c0
unset print
Packit 0986c0
#
Packit 0986c0
Packit 0986c0
set border 2
Packit 0986c0
set xrange [33:36]
Packit 0986c0
set xtics ("A" 34, "B" 35)
Packit 0986c0
set xtics nomirror scale 0
Packit 0986c0
set ytics nomirror rangelimited
Packit 0986c0
unset key
Packit 0986c0
Packit 0986c0
set jitter overlap first 2
Packit 0986c0
set title font ",15"
Packit 0986c0
set title "swarm jitter with a large number of points\n approximates a violin plot"
Packit 0986c0
set style data points
Packit 0986c0
Packit 0986c0
set linetype  9 lc "#80bbaa44" ps 0.5 pt 5
Packit 0986c0
set linetype 10 lc "#8033bbbb" ps 0.5 pt 5
Packit 0986c0
Packit 0986c0
plot $viol1 lt 9, $viol2 lt 10
Packit 0986c0
Packit 0986c0
pause -1 'Hit <cr> to continue'
Packit 0986c0
Packit 0986c0
set title "Gaussian random jitter"
Packit 0986c0
unset jitter
Packit 0986c0
Packit 0986c0
J = 0.1
Packit 0986c0
plot $viol1 using ($1 + J*invnorm(rand(0))):2 lt 9, \
Packit 0986c0
     $viol2 using ($1 + J*invnorm(rand(0))):2 lt 10 
Packit 0986c0
Packit 0986c0
pause -1 "Hit <cr> to continue"
Packit 0986c0
Packit 0986c0
set title "Same data - kernel density"
Packit 0986c0
set style data filledcurves below
Packit 0986c0
set auto x
Packit 0986c0
set xtics 0,50,500
Packit 0986c0
unset ytics
Packit 0986c0
set border 3
Packit 0986c0
set margins screen .15, screen .85, screen .15, screen .85
Packit 0986c0
set key
Packit 0986c0
Packit 0986c0
plot $viol1 using 2:(1) smooth kdensity bandwidth 10. with filledcurves above y lt 9 title 'B', \
Packit 0986c0
     $viol2 using 2:(1) smooth kdensity bandwidth 10. with filledcurves above y lt 10 title 'A'
Packit 0986c0
Packit 0986c0
pause -1 "Hit <cr> to continue"
Packit 0986c0
Packit 0986c0
#
Packit 0986c0
# Save each kernel density plot to a data block 
Packit 0986c0
# Then replot, mirrored, along the vertical axis
Packit 0986c0
#
Packit 0986c0
Packit 0986c0
set title "kdensity mirrored sideways to give a violin plot"
Packit 0986c0
Packit 0986c0
set table $kdensity1
Packit 0986c0
plot $viol1 using 2:(1) smooth kdensity bandwidth 10. with filledcurves above y lt 9 title 'B'
Packit 0986c0
set table $kdensity2
Packit 0986c0
plot $viol2 using 2:(1) smooth kdensity bandwidth 10. with filledcurves above y lt 10 title 'A'
Packit 0986c0
unset table
Packit 0986c0
unset key
Packit 0986c0
Packit 0986c0
set border 2
Packit 0986c0
unset margins
Packit 0986c0
unset xtics
Packit 0986c0
set ytics nomirror rangelimited
Packit 0986c0
Packit 0986c0
set xrange [-1:5]
Packit 0986c0
plot $kdensity2 using (1 + $2/20.):1 with filledcurve x=1 lt 10, \
Packit 0986c0
     '' using (1 - $2/20.):1 with filledcurve x=1 lt 10, \
Packit 0986c0
     $kdensity1 using (3 + $2/20.):1 with filledcurve x=3 lt 9, \
Packit 0986c0
     '' using (3 - $2/20.):1 with filledcurve x=3 lt 9
Packit 0986c0
Packit 0986c0
pause -1 "Hit <cr> to continue"
Packit 0986c0
Packit 0986c0
set title 'Superimposed violin plot and box plot'
Packit 0986c0
Packit 0986c0
set style fill solid bo -1
Packit 0986c0
set boxwidth 0.075
Packit 0986c0
set errorbars lt black lw 1
Packit 0986c0
Packit 0986c0
replot $viol2 using (1):2 with boxplot fc "white" lw 2, \
Packit 0986c0
       $viol1 using (3):2 with boxplot fc "white" lw 2
Packit 0986c0
Packit 0986c0
pause -1 "Hit <cr> to continue"
Packit 0986c0
Packit 0986c0
reset