Minor changes
This commit is contained in:
parent
a655e5af6c
commit
e7f500b5a0
51
README.md
51
README.md
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
[](https://travis-ci.org/gcalderone/Gnuplot.jl)
|
[](https://travis-ci.org/gcalderone/Gnuplot.jl)
|
||||||
|
|
||||||
**Gnuplot.jl** allows easy and fast use of [Gnuplot](http://gnuplot.info/) as data visualization tool in Julia. Its main features are:
|
**Gnuplot.jl** allows easy and fast use of [Gnuplot](http://gnuplot.info/) as a data visualization tool in Julia. Its main features are:
|
||||||
|
|
||||||
- transparent interface between Julia and gnuplot to exploit all functionalities of the latter, both present and future ones;
|
- transparent interface between Julia and gnuplot to exploit all functionalities of the latter, both present and future ones;
|
||||||
|
|
||||||
@ -19,7 +19,6 @@
|
|||||||
|
|
||||||
- very easy to use: if you know gnuplot you're ready to go.
|
- very easy to use: if you know gnuplot you're ready to go.
|
||||||
|
|
||||||
|
|
||||||
The purpose is similar to the [Gaston](https://github.com/mbaz/Gaston.jl) package, but **Gnuplot.jl** main focus is on on the syntax conciseness and ease of use.
|
The purpose is similar to the [Gaston](https://github.com/mbaz/Gaston.jl) package, but **Gnuplot.jl** main focus is on on the syntax conciseness and ease of use.
|
||||||
|
|
||||||
|
|
||||||
@ -27,17 +26,16 @@ The purpose is similar to the [Gaston](https://github.com/mbaz/Gaston.jl) packag
|
|||||||
In the Julia REPL type:
|
In the Julia REPL type:
|
||||||
|
|
||||||
``` julia
|
``` julia
|
||||||
|
using Pkg
|
||||||
Pkg.add("Gnuplot")
|
Pkg.add("Gnuplot")
|
||||||
```
|
```
|
||||||
|
You'll also need [gnuplot](http://gnuplot.info/) (ver. >= 4.7) installed on your system and its executable available in your path.
|
||||||
You'll also need [gnuplot](http://gnuplot.info/) (ver. >= 4.7) installed on your system.
|
|
||||||
|
|
||||||
|
|
||||||
## Usage:
|
## Usage:
|
||||||
The simplemost plot ever can be generated with just 8 characters:
|
The simplemost plot ever can be generated with just 7 characters:
|
||||||
``` Julia
|
``` Julia
|
||||||
using Gnuplot
|
using Gnuplot
|
||||||
@gp 1:10
|
@gp 1:9
|
||||||
```
|
```
|
||||||
|
|
||||||
A slightly more complicated one showing a parabola with a solid line and a title:
|
A slightly more complicated one showing a parabola with a solid line and a title:
|
||||||
@ -47,7 +45,6 @@ x = 1:10
|
|||||||
```
|
```
|
||||||
|
|
||||||
A real life example showing some random noise generated data:
|
A real life example showing some random noise generated data:
|
||||||
|
|
||||||
``` Julia
|
``` Julia
|
||||||
# Create some noisy data...
|
# Create some noisy data...
|
||||||
x = range(-2pi, stop=2pi, length=100);
|
x = range(-2pi, stop=2pi, length=100);
|
||||||
@ -59,56 +56,58 @@ e = 0.5 * fill(1., length(x));
|
|||||||
@gp("set key horizontal", "set grid", title="My title",
|
@gp("set key horizontal", "set grid", title="My title",
|
||||||
xrange=(-7,7), ylabel="Y label", xlab="X label",
|
xrange=(-7,7), ylabel="Y label", xlab="X label",
|
||||||
x, y, "w l t 'Real model' dt 2 lw 2 lc rgb 'red'",
|
x, y, "w l t 'Real model' dt 2 lw 2 lc rgb 'red'",
|
||||||
x, y+noise, e, "w errorbars t 'Data'");
|
x, y+noise, e, "w errorbars t 'Data'")
|
||||||
```
|
```
|
||||||
|
The syntax should be familiar to most gnuplot users, with the code above we:
|
||||||
That's it for the first plots. The syntax should be familiar to most gnuplot users, with this code we:
|
|
||||||
- set a few gnuplot properties (`key` and `grid`);
|
- set a few gnuplot properties (`key` and `grid`);
|
||||||
- set the X axis range and Y axis label;
|
- set the X axis range and Y axis label;
|
||||||
- send the data to gnuplot;
|
- send the data to gnuplot;
|
||||||
- plot two data sets specifying a few details (style, line width, color, legend, etc...).
|
- plot two data sets specifying a few details (style, line width, color, legend, etc...).
|
||||||
|
|
||||||
Note that this simple example already covers the vast majority of use cases, since the remaining details of the plot can be easily tweaked by adding the appropriate gnuplot command. Also note that you would barely recognize the Julia language by just looking at the `@gp` call since **Gnuplot.jl** aims to be mostly transparent: the user is supposed to focus only on the data and on the gnuplot commands, rather than the package details.
|
Note that this simple example already covers the vast majority of use cases, since the remaining details of the plot can be easily tweaked by adding the appropriate gnuplot command. Also note that you would barely recognize the Julia language by just looking at the `@gp` call since **Gnuplot.jl** aims to be mostly transparent: the user is supposed to focus only on the data and on the gnuplot commands, rather than the package interface.
|
||||||
|
|
||||||
If you set the verbose option (`setverbosity(true)`, which is `false` by default) you'll be able to see all the communication taking place between the **Gnuplot.jl** package and the underlyng Gnuplot process. Repeating the last command:
|
If you set the verbose option (`Gnuplot.setverbose(true)`, which is `false` by default) you'll be able to see all the communication taking place between the **Gnuplot.jl** package and the underlyng Gnuplot process. Repeating the last command:
|
||||||
```Julia
|
```Julia
|
||||||
julia> @gp("set key horizontal", "set grid", title="My title",
|
julia> @gp("set key horizontal", "set grid", title="My title",
|
||||||
xrange=(-7,7), ylabel="Y label", xlab="X label",
|
xrange=(-7,7), ylabel="Y label", xlab="X label",
|
||||||
x, y, "w l t 'Real model' dt 2 lw 2 lc rgb 'red'",
|
x, y, "w l t 'Real model' dt 2 lw 2 lc rgb 'red'",
|
||||||
x, y+noise, e, "w errorbars t 'Data'");
|
x, y+noise, e, "w errorbars t 'Data'")
|
||||||
GNUPLOT (default) reset session
|
|
||||||
GNUPLOT (default) print GPVAL_TERM
|
GNUPLOT (default) print GPVAL_TERM
|
||||||
GNUPLOT (default) -> qt
|
GNUPLOT (default) -> qt
|
||||||
GNUPLOT (default) print GPVAL_TERMOPTIONS
|
GNUPLOT (default) print GPVAL_TERMOPTIONS
|
||||||
GNUPLOT (default) -> 0 title "Gnuplot.jl: default" font "Sans,9"
|
GNUPLOT (default) -> 0 font "Sans,9"
|
||||||
|
GNUPLOT (default) set term qt 0 font "Sans,9" title 'Gnuplot.jl: default'
|
||||||
|
GNUPLOT (default) reset session
|
||||||
GNUPLOT (default) set key horizontal
|
GNUPLOT (default) set key horizontal
|
||||||
GNUPLOT (default) set grid
|
GNUPLOT (default) set grid
|
||||||
GNUPLOT (default) set title 'My title'
|
GNUPLOT (default) set title "My title"
|
||||||
GNUPLOT (default) set xrange [-7:7]
|
GNUPLOT (default) set xrange [-7:7]
|
||||||
GNUPLOT (default) set ylabel 'Y label'
|
GNUPLOT (default) set ylabel "Y label"
|
||||||
GNUPLOT (default) set xlabel 'X label'
|
GNUPLOT (default) set xlabel "X label"
|
||||||
GNUPLOT (default) $data0 << EOD
|
GNUPLOT (default) $data0 << EOD
|
||||||
GNUPLOT (default) -6.283185307179586 1.2258873407968363
|
GNUPLOT (default) -6.283185307179586 1.2258873407968363
|
||||||
GNUPLOT (default) -6.156252270670907 1.1443471266509504
|
GNUPLOT (default) -6.156252270670907 1.1443471266509504
|
||||||
GNUPLOT (default) -6.029319234162229 1.05377837392046
|
GNUPLOT (default) -6.029319234162229 1.05377837392046
|
||||||
|
GNUPLOT (default) -5.90238619765355 0.9548956415530343
|
||||||
GNUPLOT (default) ...
|
GNUPLOT (default) ...
|
||||||
GNUPLOT (default) EOD
|
GNUPLOT (default) EOD
|
||||||
GNUPLOT (default) $data1 << EOD
|
GNUPLOT (default) $data1 << EOD
|
||||||
GNUPLOT (default) -6.283185307179586 1.516291874781302 0.5
|
GNUPLOT (default) -6.283185307179586 1.9916843919829947 0.5
|
||||||
GNUPLOT (default) -6.156252270670907 1.5490769687987143 0.5
|
GNUPLOT (default) -6.156252270670907 0.33627277530403243 0.5
|
||||||
GNUPLOT (default) -6.029319234162229 0.30753349072971314 0.5
|
GNUPLOT (default) -6.029319234162229 0.2532754844189571 0.5
|
||||||
|
GNUPLOT (default) -5.90238619765355 1.083699870620209 0.5
|
||||||
GNUPLOT (default) ...
|
GNUPLOT (default) ...
|
||||||
GNUPLOT (default) EOD
|
GNUPLOT (default) EOD
|
||||||
|
GNUPLOT (default) reset
|
||||||
GNUPLOT (default) set key horizontal
|
GNUPLOT (default) set key horizontal
|
||||||
GNUPLOT (default) set grid
|
GNUPLOT (default) set grid
|
||||||
GNUPLOT (default) set title 'My title'
|
GNUPLOT (default) set title "My title"
|
||||||
GNUPLOT (default) set xrange [-7:7]
|
GNUPLOT (default) set xrange [-7:7]
|
||||||
GNUPLOT (default) set ylabel 'Y label'
|
GNUPLOT (default) set ylabel "Y label"
|
||||||
GNUPLOT (default) set xlabel 'X label'
|
GNUPLOT (default) set xlabel "X label"
|
||||||
GNUPLOT (default) plot \
|
GNUPLOT (default) plot \
|
||||||
$data0 w l t 'Real model' dt 2 lw 2 lc rgb 'red', \
|
$data0 w l t 'Real model' dt 2 lw 2 lc rgb 'red', \
|
||||||
$data1 w errorbars t 'Data'
|
$data1 w errorbars t 'Data'
|
||||||
GNUPLOT (default)
|
|
||||||
```
|
```
|
||||||
The **Gnuplot.jl** package (note the leading `GNUPLOT`...) tells us which commands are being sent to the gnuplot process and the name of the current gnuplot session (`default`). The **Gnuplot.jl** package will also print the replies from gnuplot, e.g.:
|
The **Gnuplot.jl** package (note the leading `GNUPLOT`...) tells us which commands are being sent to the gnuplot process and the name of the current gnuplot session (`default`). The **Gnuplot.jl** package will also print the replies from gnuplot, e.g.:
|
||||||
``` Julia
|
``` Julia
|
||||||
|
|||||||
@ -3,7 +3,7 @@ module Gnuplot
|
|||||||
using StructC14N, ColorTypes, Printf, StatsBase, ReusePatterns, DataFrames
|
using StructC14N, ColorTypes, Printf, StatsBase, ReusePatterns, DataFrames
|
||||||
|
|
||||||
import Base.reset
|
import Base.reset
|
||||||
import Base.write
|
import Base.println
|
||||||
import Base.iterate
|
import Base.iterate
|
||||||
import Base.convert
|
import Base.convert
|
||||||
|
|
||||||
@ -12,7 +12,6 @@ export @gp, @gsp, save, contourlines, hist
|
|||||||
# ╭───────────────────────────────────────────────────────────────────╮
|
# ╭───────────────────────────────────────────────────────────────────╮
|
||||||
# │ TYPE DEFINITIONS │
|
# │ TYPE DEFINITIONS │
|
||||||
# ╰───────────────────────────────────────────────────────────────────╯
|
# ╰───────────────────────────────────────────────────────────────────╯
|
||||||
|
|
||||||
# ---------------------------------------------------------------------
|
# ---------------------------------------------------------------------
|
||||||
mutable struct DataSet
|
mutable struct DataSet
|
||||||
name::String
|
name::String
|
||||||
@ -376,23 +375,23 @@ end
|
|||||||
|
|
||||||
|
|
||||||
# ╭───────────────────────────────────────────────────────────────────╮
|
# ╭───────────────────────────────────────────────────────────────────╮
|
||||||
# │ write() and writeread() │
|
# │ println() and writeread() │
|
||||||
# ╰───────────────────────────────────────────────────────────────────╯
|
# ╰───────────────────────────────────────────────────────────────────╯
|
||||||
# ---------------------------------------------------------------------
|
# ---------------------------------------------------------------------
|
||||||
"""
|
"""
|
||||||
# write
|
# println
|
||||||
|
|
||||||
Send a string to gnuplot's STDIN.
|
Send a string to gnuplot's STDIN.
|
||||||
|
|
||||||
The commands sent through `write` are not stored in the current
|
The commands sent through `println` are not stored in the current
|
||||||
session (use `newcmd` to save commands in the current session).
|
session (use `newcmd` to save commands in the current session).
|
||||||
|
|
||||||
## Arguments:
|
## Arguments:
|
||||||
- `gp`: a `DrySession` object;
|
- `gp`: a `DrySession` object;
|
||||||
- `str::String`: command to be sent;
|
- `str::String`: command to be sent;
|
||||||
"""
|
"""
|
||||||
write(gp::DrySession, str::AbstractString) = nothing
|
println(gp::DrySession, str::AbstractString) = nothing
|
||||||
function write(gp::GPSession, str::AbstractString)
|
function println(gp::GPSession, str::AbstractString)
|
||||||
global state
|
global state
|
||||||
if state.verbose
|
if state.verbose
|
||||||
printstyled(color=:light_yellow, "GNUPLOT ($(gp.sid)) $str\n")
|
printstyled(color=:light_yellow, "GNUPLOT ($(gp.sid)) $str\n")
|
||||||
@ -404,8 +403,8 @@ function write(gp::GPSession, str::AbstractString)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
write(gp::DrySession, d::DataSet) = nothing
|
println(gp::DrySession, d::DataSet) = nothing
|
||||||
function write(gp::GPSession, d::DataSet)
|
function println(gp::GPSession, d::DataSet)
|
||||||
if state.verbose
|
if state.verbose
|
||||||
v = ""
|
v = ""
|
||||||
printstyled(color=:light_black, "GNUPLOT ($(gp.sid)) $(d.name) << EOD\n")
|
printstyled(color=:light_black, "GNUPLOT ($(gp.sid)) $(d.name) << EOD\n")
|
||||||
@ -418,12 +417,9 @@ function write(gp::GPSession, d::DataSet)
|
|||||||
end
|
end
|
||||||
printstyled(color=:light_black, "GNUPLOT ($(gp.sid)) EOD\n")
|
printstyled(color=:light_black, "GNUPLOT ($(gp.sid)) EOD\n")
|
||||||
end
|
end
|
||||||
write(gp.pin, "\n")
|
|
||||||
write(gp.pin, "$(d.name) << EOD\n")
|
write(gp.pin, "$(d.name) << EOD\n")
|
||||||
write(gp.pin, join(d.lines, "\n") * "\n")
|
write(gp.pin, join(d.lines, "\n") * "\n")
|
||||||
write(gp.pin, "EOD\n")
|
write(gp.pin, "EOD\n")
|
||||||
write(gp.pin, "\n")
|
|
||||||
write(gp.pin, "\n")
|
|
||||||
flush(gp.pin)
|
flush(gp.pin)
|
||||||
return nothing
|
return nothing
|
||||||
end
|
end
|
||||||
@ -434,17 +430,23 @@ writeread(gp::DrySession, str::AbstractString) = [""]
|
|||||||
function writeread(gp::GPSession, str::AbstractString)
|
function writeread(gp::GPSession, str::AbstractString)
|
||||||
global state
|
global state
|
||||||
verbose = state.verbose
|
verbose = state.verbose
|
||||||
|
|
||||||
state.verbose = false
|
state.verbose = false
|
||||||
write(gp, "print 'GNUPLOT_CAPTURE_BEGIN'")
|
println(gp, "print 'GNUPLOT_CAPTURE_BEGIN'")
|
||||||
write(gp, str)
|
|
||||||
write(gp, "print 'GNUPLOT_CAPTURE_END'")
|
state.verbose = verbose
|
||||||
|
println(gp, str)
|
||||||
|
|
||||||
|
state.verbose = false
|
||||||
|
println(gp, "print 'GNUPLOT_CAPTURE_END'")
|
||||||
|
state.verbose = verbose
|
||||||
|
|
||||||
out = Vector{String}()
|
out = Vector{String}()
|
||||||
while true
|
while true
|
||||||
l = take!(gp.channel)
|
l = take!(gp.channel)
|
||||||
l == "GNUPLOT_CAPTURE_END" && break
|
l == "GNUPLOT_CAPTURE_END" && break
|
||||||
push!(out, l)
|
push!(out, l)
|
||||||
end
|
end
|
||||||
state.verbose = verbose
|
|
||||||
return out
|
return out
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -457,7 +459,7 @@ function reset(gp::DrySession)
|
|||||||
gp.datas = Vector{DataSet}()
|
gp.datas = Vector{DataSet}()
|
||||||
gp.plots = [SinglePlot()]
|
gp.plots = [SinglePlot()]
|
||||||
gp.curmid = 1
|
gp.curmid = 1
|
||||||
write(gp, "reset session")
|
println(gp, "reset session")
|
||||||
return nothing
|
return nothing
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -478,7 +480,7 @@ function newdataset(gp::DrySession, accum::Vector{String}; name="")
|
|||||||
name = "\$$name"
|
name = "\$$name"
|
||||||
d = DataSet(name, accum)
|
d = DataSet(name, accum)
|
||||||
push!(gp.datas, d)
|
push!(gp.datas, d)
|
||||||
write(gp, d) # Send now to gnuplot process
|
println(gp, d) # Send now to gnuplot process
|
||||||
return name
|
return name
|
||||||
end
|
end
|
||||||
newdataset(gp::DrySession, args...; name="") = newdataset(gp, data2string(args...), name=name)
|
newdataset(gp::DrySession, args...; name="") = newdataset(gp, data2string(args...), name=name)
|
||||||
@ -488,7 +490,7 @@ newdataset(gp::DrySession, args...; name="") = newdataset(gp, data2string(args..
|
|||||||
function newcmd(gp::DrySession, v::String; mid::Int=0)
|
function newcmd(gp::DrySession, v::String; mid::Int=0)
|
||||||
setmulti(gp, mid)
|
setmulti(gp, mid)
|
||||||
(v != "") && (push!(gp.plots[gp.curmid].cmds, v))
|
(v != "") && (push!(gp.plots[gp.curmid].cmds, v))
|
||||||
(length(gp.plots) == 1) && (write(gp, v))
|
(length(gp.plots) == 1) && (println(gp, v))
|
||||||
return nothing
|
return nothing
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -531,39 +533,39 @@ end
|
|||||||
# ---------------------------------------------------------------------
|
# ---------------------------------------------------------------------
|
||||||
dump(gp::DrySession; kw...) = dump(gp, gp; kw...)
|
dump(gp::DrySession; kw...) = dump(gp, gp; kw...)
|
||||||
function dump(gp::DrySession, stream; term::AbstractString="", output::AbstractString="")
|
function dump(gp::DrySession, stream; term::AbstractString="", output::AbstractString="")
|
||||||
write(stream, "reset\n")
|
println(stream, "reset")
|
||||||
if term != ""
|
if term != ""
|
||||||
former_term = writeread(gp, "print GPVAL_TERM")[1]
|
former_term = writeread(gp, "print GPVAL_TERM")[1]
|
||||||
former_opts = writeread(gp, "print GPVAL_TERMOPTIONS")[1]
|
former_opts = writeread(gp, "print GPVAL_TERMOPTIONS")[1]
|
||||||
write(stream, "set term $term\n")
|
println(stream, "set term $term")
|
||||||
end
|
end
|
||||||
(output != "") && write(stream, "set output '$output'\n")
|
(output != "") && println(stream, "set output '$output'")
|
||||||
|
|
||||||
if !(typeof(stream) <: DrySession)
|
if !(typeof(stream) <: DrySession)
|
||||||
# Dump datasets
|
# Dump datasets
|
||||||
for i in 1:length(gp.datas)
|
for i in 1:length(gp.datas)
|
||||||
d = gp.datas[i]
|
d = gp.datas[i]
|
||||||
write(stream, d.name * " << EOD\n")
|
println(stream, d.name * " << EOD")
|
||||||
for j in 1:length(d.lines)
|
for j in 1:length(d.lines)
|
||||||
write(stream, d.lines[j] * "\n")
|
println(stream, d.lines[j])
|
||||||
end
|
end
|
||||||
write(stream, "EOD\n")
|
println(stream, "EOD")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
for i in 1:length(gp.plots)
|
for i in 1:length(gp.plots)
|
||||||
d = gp.plots[i]
|
d = gp.plots[i]
|
||||||
for j in 1:length(d.cmds)
|
for j in 1:length(d.cmds)
|
||||||
write(stream, d.cmds[j] * "\n")
|
println(stream, d.cmds[j])
|
||||||
end
|
end
|
||||||
s = (d.flag3d ? "splot " : "plot ") * " \\\n " *
|
s = (d.flag3d ? "splot " : "plot ") * " \\\n " *
|
||||||
join(d.elems, ", \\\n ")
|
join(d.elems, ", \\\n ")
|
||||||
write(stream, s * "\n")
|
println(stream, s)
|
||||||
end
|
end
|
||||||
(length(gp.plots) > 1) && write(stream, "unset multiplot\n")
|
(length(gp.plots) > 1) && println(stream, "unset multiplot")
|
||||||
(output != "") && write(stream, "set output\n")
|
(output != "") && println(stream, "set output")
|
||||||
if term != ""
|
if term != ""
|
||||||
write(stream, "set term $former_term $former_opts\n")
|
println(stream, "set term $former_term $former_opts")
|
||||||
end
|
end
|
||||||
return output
|
return output
|
||||||
end
|
end
|
||||||
@ -966,7 +968,6 @@ function setverbose(b::Bool)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# --------------------------------------------------------------------
|
# --------------------------------------------------------------------
|
||||||
"""
|
"""
|
||||||
`save(...)`
|
`save(...)`
|
||||||
|
|||||||
@ -73,10 +73,8 @@ s = Gnuplot.data2string(u, v, z)
|
|||||||
|
|
||||||
|
|
||||||
#-----------------------------------------------------------------
|
#-----------------------------------------------------------------
|
||||||
|
|
||||||
x = collect(1.:100);
|
x = collect(1.:100);
|
||||||
|
|
||||||
#-----------------------------------------------------------------
|
|
||||||
for i in 1:10
|
for i in 1:10
|
||||||
@gp :gp1 "plot sin($i*x)"
|
@gp :gp1 "plot sin($i*x)"
|
||||||
@gp :gp2 "plot sin($i*x)"
|
@gp :gp2 "plot sin($i*x)"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user