diff --git a/docs/example_generation.jl b/docs/example_generation.jl index e6ef30a1..45035686 100644 --- a/docs/example_generation.jl +++ b/docs/example_generation.jl @@ -36,7 +36,7 @@ const examples = PlotExample[ [:(plot(0:0.01:4π, [sin,cos]))]), PlotExample("", "Or make a parametric plot (i.e. plot: (fx(u), fy(u))) with plot(fx, fy, umin, umax).", - [:(plot(sin, x->sin(2x), 0, 2π, leg=false, fill=(0,:orange)))]), + [:(plot(sin, x->sin(2x), 0, 2π, line=4, leg=false, fill=(0,:orange)))]), PlotExample("Colors", "Access predefined palettes (or build your own with the `colorscheme` method). Line/marker colors are auto-generated from the plot's palette, unless overridden. Set the `z` argument to turn on series gradients.", [:(y = rand(100)), :(plot(0:10:100,rand(11,4),lab="lines",w=3, palette=:grays, fill=(0.5,:auto))), :(scatter!(y, z=abs(y-.5), m=(10,:heat), lab="grad"))]), diff --git a/docs/qwt_examples.md b/docs/qwt_examples.md index 42f30033..c432fba2 100644 --- a/docs/qwt_examples.md +++ b/docs/qwt_examples.md @@ -1,8 +1,8 @@ # Examples for backend: qwt -- Supported arguments: `annotation`, `args`, `axis`, `background_color`, `color`, `fillto`, `foreground_color`, `group`, `heatmap_c`, `kwargs`, `label`, `layout`, `legend`, `linestyle`, `linetype`, `marker`, `markercolor`, `markersize`, `n`, `nbins`, `nc`, `nr`, `pos`, `reg`, `show`, `size`, `title`, `width`, `windowtitle`, `x`, `xlabel`, `y`, `ylabel`, `yrightlabel` +- Supported arguments: `annotation`, `axis`, `background_color`, `color`, `fillrange`, `fillcolor`, `foreground_color`, `group`, `heatmap_c`, `label`, `layout`, `legend`, `linestyle`, `linetype`, `linewidth`, `markershape`, `markercolor`, `markersize`, `n`, `nbins`, `nc`, `nr`, `pos`, `reg`, `show`, `size`, `title`, `windowtitle`, `x`, `xlabel`, `xlims`, `xticks`, `y`, `ylabel`, `ylims`, `yrightlabel`, `yticks`, `xscale`, `yscale` - Supported values for axis: `:auto`, `:left`, `:right` -- Supported values for linetype: `:none`, `:line`, `:path`, `:steppre`, `:steppost`, `:sticks`, `:scatter`, `:heatmap`, `:hexbin`, `:hist`, `:bar` +- Supported values for linetype: `:none`, `:line`, `:path`, `:steppre`, `:steppost`, `:sticks`, `:scatter`, `:heatmap`, `:hexbin`, `:hist`, `:bar`, `:hline`, `:vline` - Supported values for linestyle: `:auto`, `:solid`, `:dash`, `:dot`, `:dashdot`, `:dashdotdot` - Supported values for marker: `:none`, `:auto`, `:rect`, `:ellipse`, `:diamond`, `:utriangle`, `:dtriangle`, `:cross`, `:xcross`, `:star1`, `:star2`, `:hexagon` - Is `subplot`/`subplot!` supported? Yes @@ -19,14 +19,14 @@ qwt() A simple line plot of the columns. ```julia -plot(rand(50,5),w=3) +plot(fakedata(50,5),w=3) ``` ![](../img/qwt/qwt_example_1.png) ### Functions -Plot multiple functions. You can also put the function first. +Plot multiple functions. You can also put the function first, or use the form `plot(f, xmin, xmax)` where f is a Function or AbstractVector{Function}. ```julia plot(0:0.01:4π,[sin,cos]) @@ -36,32 +36,34 @@ plot(0:0.01:4π,[sin,cos]) ### -You can also call it with plot(f, xmin, xmax). +Or make a parametric plot (i.e. plot: (fx(u), fy(u))) with plot(fx, fy, umin, umax). ```julia -plot([sin,cos],0,4π) +plot(sin,(x->begin # /home/tom/.julia/v0.4/Plots/docs/example_generation.jl, line 39: + sin(2x) + end),0,2π,line=4,leg=false,fill=(0,:orange)) ``` ![](../img/qwt/qwt_example_3.png) -### +### Colors -Or make a parametric plot (i.e. plot: (fx(u), fy(u))) with plot(fx, fy, umin, umax). +Access predefined palettes (or build your own with the `colorscheme` method). Line/marker colors are auto-generated from the plot's palette, unless overridden. Set the `z` argument to turn on series gradients. ```julia -plot(sin,(x->begin # /home/tom/.julia/v0.4/Plots/docs/example_generation.jl, line 33: - sin(2x) - end),0,2π,legend=false,fillto=0) +y = rand(100) +plot(0:10:100,rand(11,4),lab="lines",w=3,palette=:grays,fill=(0.5,:auto)) +scatter!(y,z=abs(y - 0.5),m=(10,:heat),lab="grad") ``` ![](../img/qwt/qwt_example_4.png) ### Global -Change the guides/background/limits/ticks. You can also use shorthand functions: `title!`, `xlabel!`, `ylabel!`, `xlims!`, `ylims!`, `xticks!`, `yticks!` +Change the guides/background/limits/ticks. Convenience args `xaxis` and `yaxis` allow you to pass a tuple or value which will be mapped to the relevant args automatically. The `xaxis` below will be replaced with `xlabel` and `xlims` args automatically during the preprocessing step. You can also use shorthand functions: `title!`, `xaxis!`, `yaxis!`, `xlabel!`, `ylabel!`, `xlims!`, `ylims!`, `xticks!`, `yticks!` ```julia -plot(rand(10),title="TITLE",xlabel="XLABEL",ylabel="YLABEL",background_color=RGB(0.2,0.2,0.2),xlim=(-3,13),yticks=0:0.1:1) +plot(rand(20,3),title="TITLE",xaxis=("XLABEL",(-5,30),0:2:20,:flip),yaxis=("YLABEL",:log10),background_color=RGB(0.2,0.2,0.2),leg=false) ``` ![](../img/qwt/qwt_example_5.png) @@ -73,17 +75,17 @@ Use the `axis` arguments. Note: Currently only supported with Qwt and PyPlot ```julia -plot(Vector[randn(100),randn(100) * 100]; axis=[:l,:r],ylabel="LEFT",yrightlabel="RIGHT") +plot(Vector[randn(100),randn(100) * 100]; axis=[:l :r],ylabel="LEFT",yrightlabel="RIGHT") ``` ![](../img/qwt/qwt_example_6.png) -### Vectors w/ pluralized args +### Arguments -Plot multiple series with different numbers of points. Mix arguments that apply to all series (marker/markersize) with arguments unique to each series (colors). +Plot multiple series with different numbers of points. Mix arguments that apply to all series (marker/markersize) with arguments unique to each series (colors). Special arguments `line`, `marker`, and `fill` will automatically figure out what arguments to set (for example, we are setting the `linestyle`, `linewidth`, and `color` arguments with `line`.) Note that we pass a matrix of colors, and this applies the colors to each series. ```julia -plot(Vector[rand(10),rand(20)]; marker=:ellipse,markersize=8,c=[:red,:blue]) +plot(Vector[rand(10),rand(20)]; marker=(:ellipse,8),line=(:dot,3,[:black :orange])) ``` ![](../img/qwt/qwt_example_7.png) @@ -93,7 +95,7 @@ plot(Vector[rand(10),rand(20)]; marker=:ellipse,markersize=8,c=[:red,:blue]) Start with a base plot... ```julia -plot(rand(100) / 3,reg=true,fillto=0) +plot(rand(100) / 3,reg=true,fill=(0,:green)) ``` ![](../img/qwt/qwt_example_8.png) @@ -103,7 +105,7 @@ plot(rand(100) / 3,reg=true,fillto=0) and add to it later. ```julia -scatter!(rand(100),markersize=6,c=:blue) +scatter!(rand(100),markersize=6,c=:orange) ``` ![](../img/qwt/qwt_example_9.png) @@ -123,11 +125,11 @@ heatmap(randn(10000),randn(10000),nbins=100) ```julia -types = intersect(supportedTypes(),[:line,:path,:steppre,:steppost,:sticks,:scatter]) +types = intersect(supportedTypes(),[:line,:path,:steppre,:steppost,:sticks,:scatter])' n = length(types) x = Vector[sort(rand(20)) for i = 1:n] y = rand(20,n) -plot(x,y,t=types,lab=map(string,types)) +plot(x,y,line=(types,3),lab=map(string,types),ms=15) ``` ![](../img/qwt/qwt_example_11.png) @@ -137,7 +139,7 @@ plot(x,y,t=types,lab=map(string,types)) ```julia -styles = setdiff(supportedStyles(),[:auto]) +styles = setdiff(supportedStyles(),[:auto])' plot(cumsum(randn(20,length(styles)),1); style=:auto,label=map(string,styles),w=5) ``` @@ -148,8 +150,8 @@ plot(cumsum(randn(20,length(styles)),1); style=:auto,label=map(string,styles),w= ```julia -markers = setdiff(supportedMarkers(),[:none,:auto]) -scatter(0.5:9.5,[fill(i - 0.5,10) for i = length(markers):-1:1]; marker=:auto,label=map(string,markers),ms=10) +markers = setdiff(supportedMarkers(),[:none,:auto])' +scatter(0.5:9.5,[fill(i - 0.5,10) for i = length(markers):-1:1]; marker=:auto,label=map(string,markers),ms=12) ``` ![](../img/qwt/qwt_example_13.png) @@ -159,7 +161,7 @@ scatter(0.5:9.5,[fill(i - 0.5,10) for i = length(markers):-1:1]; marker=:auto,la x is the midpoint of the bar. (todo: allow passing of edges instead of midpoints) ```julia -bar(randn(1000)) +bar(randn(999)) ``` ![](../img/qwt/qwt_example_14.png) @@ -182,7 +184,7 @@ histogram(randn(1000),nbins=50) ```julia -subplot(randn(100,5),layout=[1,1,3],t=[:line,:hist,:scatter,:step,:bar],nbins=10,leg=false) +subplot(randn(100,5),layout=[1,1,3],t=[:line :hist :scatter :step :bar],nbins=10,leg=false) ``` ![](../img/qwt/qwt_example_16.png) @@ -192,7 +194,7 @@ subplot(randn(100,5),layout=[1,1,3],t=[:line,:hist,:scatter,:step,:bar],nbins=10 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) +subplot(fakedata(100,10),n=4,palette=[:grays :blues :heat :lightrainbow],bg=[:orange :pink :darkblue :black]) ``` ![](../img/qwt/qwt_example_17.png) @@ -202,7 +204,7 @@ subplot(randn(100,5),n=4) ```julia -subplot!(randn(100,3)) +subplot!(fakedata(100,10)) ``` ![](../img/qwt/qwt_example_18.png) diff --git a/img/qwt/qwt_example_1.png b/img/qwt/qwt_example_1.png index 2e20fe38..923a8e97 100644 Binary files a/img/qwt/qwt_example_1.png and b/img/qwt/qwt_example_1.png differ diff --git a/img/qwt/qwt_example_10.png b/img/qwt/qwt_example_10.png index 5d2df3a8..966de20b 100644 Binary files a/img/qwt/qwt_example_10.png and b/img/qwt/qwt_example_10.png differ diff --git a/img/qwt/qwt_example_11.png b/img/qwt/qwt_example_11.png index e68b2913..151e76a0 100644 Binary files a/img/qwt/qwt_example_11.png and b/img/qwt/qwt_example_11.png differ diff --git a/img/qwt/qwt_example_12.png b/img/qwt/qwt_example_12.png index 5e1b3bcb..3f7f2c38 100644 Binary files a/img/qwt/qwt_example_12.png and b/img/qwt/qwt_example_12.png differ diff --git a/img/qwt/qwt_example_13.png b/img/qwt/qwt_example_13.png index 37deb057..4cd25e66 100644 Binary files a/img/qwt/qwt_example_13.png and b/img/qwt/qwt_example_13.png differ diff --git a/img/qwt/qwt_example_14.png b/img/qwt/qwt_example_14.png index a35a9fa6..3a22fbdd 100644 Binary files a/img/qwt/qwt_example_14.png and b/img/qwt/qwt_example_14.png differ diff --git a/img/qwt/qwt_example_15.png b/img/qwt/qwt_example_15.png index 67f6a74d..749055f8 100644 Binary files a/img/qwt/qwt_example_15.png and b/img/qwt/qwt_example_15.png differ diff --git a/img/qwt/qwt_example_16.png b/img/qwt/qwt_example_16.png index 4e31cab2..9bb8914d 100644 Binary files a/img/qwt/qwt_example_16.png and b/img/qwt/qwt_example_16.png differ diff --git a/img/qwt/qwt_example_17.png b/img/qwt/qwt_example_17.png index b1d8798c..4d7db770 100644 Binary files a/img/qwt/qwt_example_17.png and b/img/qwt/qwt_example_17.png differ diff --git a/img/qwt/qwt_example_18.png b/img/qwt/qwt_example_18.png index a5913dce..158c1edd 100644 Binary files a/img/qwt/qwt_example_18.png and b/img/qwt/qwt_example_18.png differ diff --git a/img/qwt/qwt_example_2.png b/img/qwt/qwt_example_2.png index 1063e62a..b27850e7 100644 Binary files a/img/qwt/qwt_example_2.png and b/img/qwt/qwt_example_2.png differ diff --git a/img/qwt/qwt_example_20.png b/img/qwt/qwt_example_20.png index 54d91ed6..a4ea54d0 100644 Binary files a/img/qwt/qwt_example_20.png and b/img/qwt/qwt_example_20.png differ diff --git a/img/qwt/qwt_example_3.png b/img/qwt/qwt_example_3.png index 08fa43d5..77bc618d 100644 Binary files a/img/qwt/qwt_example_3.png and b/img/qwt/qwt_example_3.png differ diff --git a/img/qwt/qwt_example_4.png b/img/qwt/qwt_example_4.png index ec2944a3..fce8f2c8 100644 Binary files a/img/qwt/qwt_example_4.png and b/img/qwt/qwt_example_4.png differ diff --git a/img/qwt/qwt_example_5.png b/img/qwt/qwt_example_5.png index 24e7a667..8b450eb1 100644 Binary files a/img/qwt/qwt_example_5.png and b/img/qwt/qwt_example_5.png differ diff --git a/img/qwt/qwt_example_6.png b/img/qwt/qwt_example_6.png index 4277adc4..472cc9fe 100644 Binary files a/img/qwt/qwt_example_6.png and b/img/qwt/qwt_example_6.png differ diff --git a/img/qwt/qwt_example_7.png b/img/qwt/qwt_example_7.png index a2734199..be4a55e2 100644 Binary files a/img/qwt/qwt_example_7.png and b/img/qwt/qwt_example_7.png differ diff --git a/img/qwt/qwt_example_8.png b/img/qwt/qwt_example_8.png index adbd05b7..4e971b3c 100644 Binary files a/img/qwt/qwt_example_8.png and b/img/qwt/qwt_example_8.png differ diff --git a/img/qwt/qwt_example_9.png b/img/qwt/qwt_example_9.png index a53b6da0..053f647d 100644 Binary files a/img/qwt/qwt_example_9.png and b/img/qwt/qwt_example_9.png differ diff --git a/src/backends/qwt.jl b/src/backends/qwt.jl index d59ac312..efe7b172 100644 --- a/src/backends/qwt.jl +++ b/src/backends/qwt.jl @@ -13,7 +13,9 @@ supportedArgs(::QwtPackage) = [ :axis, :background_color, :color, - :fill, + :color_palette, + :fillrange, + :fillcolor, :foreground_color, :group, :heatmap_c, @@ -61,12 +63,24 @@ supportedScales(::QwtPackage) = [:identity, :log10] const _qwtAliases = Dict( :nbins => :heatmap_n, + :fillrange => :fillto, + :linewidth => :width, + :markershape => :marker, :hexbin => :heatmap, :path => :line, :steppost => :step, :steppre => :stepinverted, ) + +function fixcolors(d::Dict) + for (k,v) in d + if typeof(v) <: ColorScheme + d[k] = getColor(v) + end + end +end + function replaceLinetypeAlias(d) if haskey(_qwtAliases, d[:linetype]) d[:linetype] = _qwtAliases[d[:linetype]] @@ -110,6 +124,7 @@ end function plot(pkg::QwtPackage; kw...) d = Dict(kw) + fixcolors(d) o = Qwt.plot(zeros(0,0); d..., show=false) plt = Plot(o, pkg, 0, d, Dict[]) plt @@ -117,6 +132,7 @@ end function plot!(::QwtPackage, plt::Plot; kw...) d = adjustQwtKeywords(plt, false; kw...) + fixcolors(d) Qwt.oplot(plt.o; d...) push!(plt.seriesargs, d) plt @@ -183,7 +199,7 @@ function addLineMarker(plt::Plot{QwtPackage}, d::Dict) ishorizontal = (d[:linetype] == :hline) marker[:setLineStyle](ishorizontal ? 1 : 2) marker[ishorizontal ? :setYValue : :setXValue](yi) - qcolor = Qwt.convertRGBToQColor(d[:color]) + qcolor = Qwt.convertRGBToQColor(getColor(d[:color])) linestyle = plt.o.widget[:getLineStyle](string(d[:linestyle])) marker[:setLinePen](Qwt.QT.QPen(qcolor, d[:linewidth], linestyle)) marker[:attach](plt.o.widget)