commit daaeb360962b25bc3312ae43f07fb6d445f94b1d
parent 8b1cd340b84b6f8c0481f128f91a054872906aa8
Author: Anders Damsgaard <andersd@riseup.net>
Date: Fri, 17 Nov 2017 14:08:56 -0500
fix GSD plotting when there is no size variance and add option to specify gnuplot terminal
Diffstat:
2 files changed, 28 insertions(+), 18 deletions(-)
diff --git a/src/grain.jl b/src/grain.jl
@@ -744,7 +744,8 @@ function plotGrainSizeDistribution(simulation::Simulation;
nbins::Int=12,
size_type::String = "contact",
figsize::Tuple = (6,4),
- filetype::String = "png",
+ filetype::String = "pdf",
+ gnuplot_terminal::String = "pdfcairo",
verbose::Bool = true,
skip_fixed::Bool = true,
log_y::Bool = false,
@@ -772,14 +773,28 @@ function plotGrainSizeDistribution(simulation::Simulation;
writedlm(datafile, diameters)
gnuplotscript = Base.Filesystem.tempname()
+ #if maximum(diameters) ≈ minimum(diameters)
+ #info("Overriding `nbins = $nbins` -> `nbins = 1`.")
+ #nbins = 1
+ #end
+
open(gnuplotscript, "w") do f
write(f, """#!/usr/bin/env gnuplot
- set out "$(filename)"
- set xlabel "Diameter [m]"
+ set term $gnuplot_terminal size 12 cm,8 cm
+ set out "$(filename)"\n""")
+ if log_y
+ write(f, "set logscale y\n")
+ end
+ write(f, """set xlabel "Diameter [m]"
set ylabel "Count [-]"
- set style histogram
- plot "$(datafile)"
+ binwidth = $((maximum(diameters) - minimum(diameters)+1e-7)/nbins)
+ binstart = $(minimum(diameters))
+ set boxwidth 1.0*binwidth
+ set style fill solid 0.5
+ set key off
+ hist = 'u (binwidth*(floor((\$1-binstart)/binwidth)+0.5)+binstart):(1.0) smooth freq w boxes'
+ plot "$(datafile)" i 0 @hist ls 1
""")
end
@@ -791,15 +806,6 @@ function plotGrainSizeDistribution(simulation::Simulation;
end
end
-
- xlabel = "Diameter [m]"
- ylabel = "Count [-]"
- if log_y
- error("Logarithmic axis scaling isn't yet supported with GR histograms")
- # try anyway
- GR.setscale(GR.OPTION_Y_LOG)
- GR.setscale(GR.OPTION_FLIP_X)
- end
if verbose
info(filename)
end
diff --git a/test/grain.jl b/test/grain.jl
@@ -32,14 +32,18 @@ Granular.compareGrains(sim.grains[1], sim.grains[2])
info("Testing GSD plotting ")
Granular.plotGrainSizeDistribution(sim)
+@test isfile("test-grain-size-distribution.pdf")
+rm("test-grain-size-distribution.pdf")
+Granular.plotGrainSizeDistribution(sim, filetype="png",
+ gnuplot_terminal="pngcairo")
@test isfile("test-grain-size-distribution.png")
rm("test-grain-size-distribution.png")
Granular.plotGrainSizeDistribution(sim, skip_fixed=false)
-@test isfile("test-grain-size-distribution.png")
-rm("test-grain-size-distribution.png")
+@test isfile("test-grain-size-distribution.pdf")
+rm("test-grain-size-distribution.pdf")
Granular.plotGrainSizeDistribution(sim, size_type="areal")
-@test isfile("test-grain-size-distribution.png")
-rm("test-grain-size-distribution.png")
+@test isfile("test-grain-size-distribution.pdf")
+rm("test-grain-size-distribution.pdf")
@test_throws ErrorException Granular.plotGrainSizeDistribution(sim, size_type="asdf")
info("Testing external body force routines")