working on gadfly and immerse
@ -59,7 +59,7 @@ const examples = PlotExample[
|
|||||||
"Options: (:none, :ellipse, :rect, :diamond, :utriangle, :dtriangle, :cross, :xcross, :star1, :star2, :hexagon) \nNote: some may not work with all backends",
|
"Options: (:none, :ellipse, :rect, :diamond, :utriangle, :dtriangle, :cross, :xcross, :star1, :star2, :hexagon) \nNote: some may not work with all backends",
|
||||||
[:(plot(repmat(collect(1:10)',10,1); markers=[:ellipse, :rect, :diamond, :utriangle, :dtriangle, :cross, :xcross, :star1, :star2, :hexagon],
|
[:(plot(repmat(collect(1:10)',10,1); markers=[:ellipse, :rect, :diamond, :utriangle, :dtriangle, :cross, :xcross, :star1, :star2, :hexagon],
|
||||||
labels=["ellipse", "rect", "diamond", "utriangle", "dtriangle", "cross", "xcross", "star1", "star2", "hexagon"],
|
labels=["ellipse", "rect", "diamond", "utriangle", "dtriangle", "cross", "xcross", "star1", "star2", "hexagon"],
|
||||||
linetype=:none, markersize=10))]),
|
markersize=10))]),
|
||||||
PlotExample("Bar",
|
PlotExample("Bar",
|
||||||
"x is the midpoint of the bar. (todo: allow passing of edges instead of midpoints)",
|
"x is the midpoint of the bar. (todo: allow passing of edges instead of midpoints)",
|
||||||
[:(bar(randn(1000)))]),
|
[:(bar(randn(1000)))]),
|
||||||
@ -131,11 +131,11 @@ end
|
|||||||
|
|
||||||
# run it!
|
# run it!
|
||||||
# note: generate separately so it's easy to comment out
|
# note: generate separately so it's easy to comment out
|
||||||
generate_markdown(:qwt)
|
# generate_markdown(:qwt)
|
||||||
generate_markdown(:gadfly)
|
generate_markdown(:gadfly)
|
||||||
# @osx_only generate_markdown(:unicodeplots)
|
# @osx_only generate_markdown(:unicodeplots)
|
||||||
# generate_markdown(:pyplot)
|
# generate_markdown(:pyplot)
|
||||||
generate_markdown(:immerse)
|
# generate_markdown(:immerse)
|
||||||
|
|
||||||
|
|
||||||
end # module
|
end # module
|
||||||
|
|||||||
@ -1,192 +0,0 @@
|
|||||||
### Lines
|
|
||||||
|
|
||||||
A simple line plot of the 3 columns.
|
|
||||||
|
|
||||||
```julia
|
|
||||||
plot(rand(100,3))
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Functions
|
|
||||||
|
|
||||||
Plot multiple functions.
|
|
||||||
|
|
||||||
```julia
|
|
||||||
plot(0:0.01:4π,[sin,cos])
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
###
|
|
||||||
|
|
||||||
You can also call it with plot(f, xmin, xmax).
|
|
||||||
|
|
||||||
```julia
|
|
||||||
plot([sin,cos],0,4π)
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
###
|
|
||||||
|
|
||||||
Or make a parametric plot with plot(fx, fy, umin, umax).
|
|
||||||
|
|
||||||
```julia
|
|
||||||
plot(sin,(x->begin # /home/tom/.julia/v0.4/Plots/docs/example_generation.jl, line 33:
|
|
||||||
sin(2x)
|
|
||||||
end),0,2π)
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Global
|
|
||||||
|
|
||||||
Change the guides/background without a separate call.
|
|
||||||
|
|
||||||
```julia
|
|
||||||
plot(rand(10); title="TITLE",xlabel="XLABEL",ylabel="YLABEL",background_color=RGB(0.5,0.5,0.5))
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Two-axis
|
|
||||||
|
|
||||||
Use the `axis` or `axiss` arguments.
|
|
||||||
|
|
||||||
Note: This is only supported with Qwt right now
|
|
||||||
|
|
||||||
```julia
|
|
||||||
plot(Vector[randn(100),randn(100) * 100]; axiss=[:left,:right],ylabel="LEFT",yrightlabel="RIGHT")
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Vectors w/ pluralized args
|
|
||||||
|
|
||||||
Plot multiple series with different numbers of points. Mix arguments that apply to all series (singular... see `marker`) with arguments unique to each series (pluralized... see `colors`).
|
|
||||||
|
|
||||||
```julia
|
|
||||||
plot(Vector[rand(10),rand(20)]; marker=:ellipse,markersize=8,colors=[:red,:blue])
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Build plot in pieces
|
|
||||||
|
|
||||||
Start with a base plot...
|
|
||||||
|
|
||||||
```julia
|
|
||||||
plot(rand(100) / 3; reg=true,fillto=0)
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
###
|
|
||||||
|
|
||||||
and add to it later.
|
|
||||||
|
|
||||||
```julia
|
|
||||||
scatter!(rand(100); markersize=6,color=:blue)
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Heatmaps
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
```julia
|
|
||||||
heatmap(randn(10000),randn(10000); nbins=100)
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Lots of line types
|
|
||||||
|
|
||||||
Options: (:line, :step, :stepinverted, :sticks, :dots, :none, :heatmap, :hexbin, :hist, :bar)
|
|
||||||
Note: some may not work with all backends
|
|
||||||
|
|
||||||
```julia
|
|
||||||
plot(rand(20,4); linetypes=[:line,:step,:sticks,:dots],labels=["line","step","sticks","dots"])
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Lots of line styles
|
|
||||||
|
|
||||||
Options: (:solid, :dash, :dot, :dashdot, :dashdotdot)
|
|
||||||
Note: some may not work with all backends
|
|
||||||
|
|
||||||
```julia
|
|
||||||
plot(rand(20,5); linestyles=[:solid,:dash,:dot,:dashdot,:dashdotdot],labels=["solid","dash","dot","dashdot","dashdotdot"])
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Lots of marker types
|
|
||||||
|
|
||||||
Options: (:none, :ellipse, :rect, :diamond, :utriangle, :dtriangle, :cross, :xcross, :star1, :star2, :hexagon)
|
|
||||||
Note: some may not work with all backends
|
|
||||||
|
|
||||||
```julia
|
|
||||||
plot(repmat(collect(1:10)',10,1); markers=[:ellipse,:rect,:diamond,:utriangle,:dtriangle,:cross,:xcross,:star1,:star2,:hexagon],labels=["ellipse","rect","diamond","utriangle","dtriangle","cross","xcross","star1","star2","hexagon"],linetype=:none,markersize=10)
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Bar
|
|
||||||
|
|
||||||
x is the midpoint of the bar. (todo: allow passing of edges instead of midpoints)
|
|
||||||
|
|
||||||
```julia
|
|
||||||
bar(randn(1000))
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Histogram
|
|
||||||
|
|
||||||
note: fillto isn't supported on all backends
|
|
||||||
|
|
||||||
```julia
|
|
||||||
histogram(randn(1000); nbins=50,fillto=20)
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Subplots
|
|
||||||
|
|
||||||
subplot and subplot! are distinct commands which create many plots and add series to them in a circular fashion.
|
|
||||||
You can define the layout with keyword params... either set the number of plots `n` (and optionally number of rows `nr` or
|
|
||||||
number of columns `nc`), or you can set the layout directly with `layout`.
|
|
||||||
|
|
||||||
Note: Gadfly is not very friendly here, and although you can create a plot and save a PNG, I haven't been able to actually display it.
|
|
||||||
|
|
||||||
|
|
||||||
```julia
|
|
||||||
subplot(randn(100,5); layout=[1,1,3],linetypes=[:line,:hist,:dots,:step,:bar],nbins=10,legend=false)
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Adding to subplots
|
|
||||||
|
|
||||||
Note here the automatic grid layout, as well as the order in which new series are added to the plots.
|
|
||||||
|
|
||||||
```julia
|
|
||||||
subplot(randn(100,5); n=4)
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
###
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
```julia
|
|
||||||
subplot!(randn(100,3))
|
|
||||||
```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 0 B |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 50 KiB |
@ -83,13 +83,16 @@ function getMarkerGeomsAndGuides(d::Dict)
|
|||||||
sz = d[:markersize] * Gadfly.px
|
sz = d[:markersize] * Gadfly.px
|
||||||
# primitive = Gadfly.Compose.PolygonPrimitive()
|
# primitive = Gadfly.Compose.PolygonPrimitive()
|
||||||
|
|
||||||
xs = [xi * Gadfly.mm - sz/2 for xi in d[:x]]
|
|
||||||
ys = [yi * Gadfly.mm - sz/2 for yi in d[:y]]
|
# xs = [xi * Gadfly.mm - sz/2 for xi in d[:x]]
|
||||||
|
# ys = [yi * Gadfly.mm - sz/2 for yi in d[:y]]
|
||||||
|
xs = collect(d[:x])
|
||||||
|
ys = collect(d[:y])
|
||||||
# xs = collect(d[:x]) - sz/2
|
# xs = collect(d[:x]) - sz/2
|
||||||
# ys = collect(d[:y]) - sz/2
|
# ys = collect(d[:y]) - sz/2
|
||||||
# w = [d[:markersize] * Gadfly.px]
|
# w = [d[:markersize] * Gadfly.px]
|
||||||
# h = [d[:markersize] * Gadfly.px]
|
# h = [d[:markersize] * Gadfly.px]
|
||||||
return [], [Gadfly.Guide.annotation(Gadfly.compose(Gadfly.context(), Gadfly.rectangle(xs,ys,sz,sz), Gadfly.fill(d[:markercolor]), Gadfly.stroke(nothing)))]
|
return [], [Gadfly.Guide.annotation(Gadfly.compose(Gadfly.context(), Gadfly.rectangle(xs,ys,[sz],[sz]), Gadfly.fill(d[:markercolor]), Gadfly.stroke(nothing)))]
|
||||||
end
|
end
|
||||||
[Gadfly.Geom.point], []
|
[Gadfly.Geom.point], []
|
||||||
end
|
end
|
||||||
@ -209,24 +212,44 @@ end
|
|||||||
function savepng(::GadflyPackage, plt::PlottingObject, fn::String;
|
function savepng(::GadflyPackage, plt::PlottingObject, fn::String;
|
||||||
w = 6 * Gadfly.inch,
|
w = 6 * Gadfly.inch,
|
||||||
h = 4 * Gadfly.inch)
|
h = 4 * Gadfly.inch)
|
||||||
Gadfly.draw(Gadfly.PNG(fn, w, h), plt.o)
|
o = getGadflyContext(plt.plotter, plt)
|
||||||
|
Gadfly.draw(Gadfly.PNG(fn, w, h), o)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
# -------------------------------
|
# -------------------------------
|
||||||
|
|
||||||
# create the underlying object (each backend will do this differently)
|
getGadflyContext(::GadflyPackage, plt::Plot) = plt.o
|
||||||
function buildSubplotObject!(::GadflyPackage, subplt::Subplot)
|
getGadflyContext(::GadflyPackage, subplt::Subplot) = buildGadflySubplotContext(subplt)
|
||||||
|
|
||||||
|
# create my Compose.Context grid by hstacking and vstacking the Gadfly.Plot objects
|
||||||
|
function buildGadflySubplotContext(subplt::Subplot)
|
||||||
i = 0
|
i = 0
|
||||||
rows = []
|
rows = []
|
||||||
for rowcnt in subplt.layout.rowcounts
|
for rowcnt in subplt.layout.rowcounts
|
||||||
push!(rows, Gadfly.hstack([plt.o for plt in subplt.plts[(1:rowcnt) + i]]...))
|
push!(rows, Gadfly.hstack([getGadflyContext(plt.plotter, plt) for plt in subplt.plts[(1:rowcnt) + i]]...))
|
||||||
i += rowcnt
|
i += rowcnt
|
||||||
end
|
end
|
||||||
subplt.o = Gadfly.vstack(rows...)
|
Gadfly.vstack(rows...)
|
||||||
|
end
|
||||||
|
|
||||||
|
# create the underlying object (each backend will do this differently)
|
||||||
|
function buildSubplotObject!(::GadflyPackage, subplt::Subplot)
|
||||||
|
# i = 0
|
||||||
|
# rows = []
|
||||||
|
# for rowcnt in subplt.layout.rowcounts
|
||||||
|
# push!(rows, Gadfly.hstack([getGadflyContext(plt.plotter, plt) for plt in subplt.plts[(1:rowcnt) + i]]...))
|
||||||
|
# i += rowcnt
|
||||||
|
# end
|
||||||
|
# subplt.o = Gadfly.vstack(rows...)
|
||||||
|
# subplt.o = buildGadflySubplotContext(subplt)
|
||||||
|
subplt.o = nothing
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function Base.display(::GadflyPackage, subplt::Subplot)
|
function Base.display(::GadflyPackage, subplt::Subplot)
|
||||||
display(subplt.o)
|
# getGadflyContext!(subplt.plotter, subplt)
|
||||||
|
# display(subplt.o)
|
||||||
|
println("HERE"); sleep(2)
|
||||||
|
display(buildGadflySubplotContext(subplt))
|
||||||
end
|
end
|
||||||
|
|||||||
@ -50,15 +50,16 @@ end
|
|||||||
|
|
||||||
# -------------------------------
|
# -------------------------------
|
||||||
|
|
||||||
getImmerseObject(plt::Plot) = plt.o[2]
|
getGadflyContext(::ImmersePackage, plt::Plot) = plt.o[2]
|
||||||
getImmerseObject(subplt::Subplot) = buildGadflySubplotContext(subplt)
|
getGadflyContext(::ImmersePackage, subplt::Subplot) = buildGadflySubplotContext(subplt)
|
||||||
|
|
||||||
|
# getImmerseObject(plt::Plot) = plt.o[2]
|
||||||
|
# getImmerseObject(subplt::Subplot) = buildGadflySubplotContext(subplt)
|
||||||
|
|
||||||
function savepng(::ImmersePackage, plt::PlottingObject, fn::String;
|
function savepng(::ImmersePackage, plt::PlottingObject, fn::String;
|
||||||
w = 6 * Immerse.inch,
|
w = 6 * Immerse.inch,
|
||||||
h = 4 * Immerse.inch)
|
h = 4 * Immerse.inch)
|
||||||
# gctx = plt.o[2]
|
gctx = getGadflyContext(plt.plotter, plt)
|
||||||
# gctx = buildGadflySubplotContext(plt)
|
|
||||||
gctx = getImmerseObject(plt)
|
|
||||||
Gadfly.draw(Gadfly.PNG(fn, w, h), gctx)
|
Gadfly.draw(Gadfly.PNG(fn, w, h), gctx)
|
||||||
nothing
|
nothing
|
||||||
end
|
end
|
||||||
@ -66,23 +67,9 @@ end
|
|||||||
|
|
||||||
# -------------------------------
|
# -------------------------------
|
||||||
|
|
||||||
# create my Compose.Context grid by hstacking and vstacking the Gadfly.Plot objects
|
|
||||||
function buildGadflySubplotContext(subplt::Subplot)
|
|
||||||
i = 0
|
|
||||||
rows = []
|
|
||||||
for rowcnt in subplt.layout.rowcounts
|
|
||||||
push!(rows, Gadfly.hstack([plt.o[2] for plt in subplt.plts[(1:rowcnt) + i]]...))
|
|
||||||
i += rowcnt
|
|
||||||
end
|
|
||||||
Gadfly.vstack(rows...)
|
|
||||||
end
|
|
||||||
|
|
||||||
# create the underlying object
|
# create the underlying object
|
||||||
function buildSubplotObject!(::ImmersePackage, subplt::Subplot)
|
function buildSubplotObject!(::ImmersePackage, subplt::Subplot)
|
||||||
# gctx = buildGadflySubplotContext(subplt)
|
|
||||||
|
|
||||||
# save this for later
|
|
||||||
# subplt.o = (nothing, gctx)
|
|
||||||
subplt.o = (nothing, nothing)
|
subplt.o = (nothing, nothing)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||