From d781c437de451f73a004c45bfbd1fbf8c1f9f236 Mon Sep 17 00:00:00 2001 From: Thomas Breloff Date: Thu, 24 Sep 2015 13:01:31 -0400 Subject: [PATCH] started real time updates; fixes #29 (pyplot ijulia display) --- examples/iris.ipynb | 2 +- examples/playground.ipynb | 136 ++++++++++++++++++++++++++++++++++++++ src/backends/immerse.jl | 22 ++++++ src/plot.jl | 7 +- src/plotter.jl | 1 + 5 files changed, 165 insertions(+), 3 deletions(-) create mode 100644 examples/playground.ipynb diff --git a/examples/iris.ipynb b/examples/iris.ipynb index 6925ed8f..8cd021f3 100644 --- a/examples/iris.ipynb +++ b/examples/iris.ipynb @@ -123,7 +123,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 0.4.0-rc2", + "display_name": "Julia 0.4.0-rc1", "language": "julia", "name": "julia-0.4" }, diff --git a/examples/playground.ipynb b/examples/playground.ipynb new file mode 100644 index 00000000..e8db545e --- /dev/null +++ b/examples/playground.ipynb @@ -0,0 +1,136 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "using Plots; pyplot!()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "plotter()\n", + "Plots.PyPlot.ioff()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "plot(rand(10))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "using Plots\n", + "plotDefault!(:size,(400,300));" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "Plot{Plots.ImmersePackage() n=2}" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "plt = plot([0,0.1], Any[rand(2),sin])" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false, + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "Plot{Plots.ImmersePackage() n=2}" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "for x in 0.2:0.1:π\n", + " push!(plt, 1, x, rand())\n", + " push!(plt, 2, x, sin(x))\n", + "end\n", + "plt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "plt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Julia 0.4.0-rc1", + "language": "julia", + "name": "julia-0.4" + }, + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "0.4.0" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/src/backends/immerse.jl b/src/backends/immerse.jl index 43766583..2d582ced 100644 --- a/src/backends/immerse.jl +++ b/src/backends/immerse.jl @@ -49,6 +49,28 @@ function updatePlotItems(plt::Plot{ImmersePackage}, d::Dict) end +# add a new x/y data point to series i +function Base.push!(plt::Plot{ImmersePackage}, i::Int, x::Real, y::Real) + gplt = plt.o[2] + data = gplt.layers[end-i+1].mapping + data[:x] = extendSeriesData(data[:x], x) + data[:y] = extendSeriesData(data[:y], y) + plt +end + +# add a new y, and extend x "naturally" +function Base.push!(plt::Plot{ImmersePackage}, i::Int, y::Real) + gplt = plt.o[2] + data = gplt.layers[end-i+1].mapping + data[:x] = extendSeriesData(data[:x]) # this will only work with a UnitRange{Int}!!! + data[:y] = extendSeriesData(data[:y], y) + plt +end + +extendSeriesData(v::UnitRange{Int}) = minimum(v):maximum(v)+1 +extendSeriesData{T<:Real}(v::AVec{T}, z::Real) = (push!(v, convert(T, z)); v) + + # ---------------------------------------------------------------- diff --git a/src/plot.jl b/src/plot.jl index a38a22d4..f36b24f2 100644 --- a/src/plot.jl +++ b/src/plot.jl @@ -173,10 +173,13 @@ convertToAnyVector(v::AVec; kw...) = Any[vi for vi in v], nothing # in computeXandY, we take in any of the possible items, convert into proper x/y vectors, then return. # this is also where all the "set x to 1:length(y)" happens, and also where we assert on lengths. computeX(x::Void, y) = 1:length(y) -computeX(x, y) = x +computeX(x, y) = copy(x) computeY(x, y::Function) = map(y, x) -computeY(x, y) = y +computeY(x, y) = copy(y) function computeXandY(x, y) + if x == nothing && isa(y, Function) + error("If you want to plot the function `$y`, you need to define the x values somehow!") + end x, y = computeX(x,y), computeY(x,y) @assert length(x) == length(y) x, y diff --git a/src/plotter.jl b/src/plotter.jl index 4a1b5cb6..0615dbdb 100644 --- a/src/plotter.jl +++ b/src/plotter.jl @@ -125,6 +125,7 @@ function plotter() try @eval import PyPlot @eval export PyPlot + PyPlot.ioff() catch error("Couldn't import PyPlot. Install it with: Pkg.add(\"PyPlot\")") end