# How to choose a plotting package?

**URL:** <https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134>\
**Category:** New to Julia\
**Tags:** question, plotting\
**Created:** [December 24, 2016, 10:45am UTC](https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134 "2016-12-24T10:45:43Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![vincent](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vincent/32/380_2.png) [@vincent](https://discourse.julialang.org/u/vincent)\
**Post date:** [December 27, 2016, 1:06pm UTC](https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134/21 "2016-12-27T13:06:36Z")

</div>

hi David  
thanks, something appeared !  
i typed exactly your code

- running it from the terminal gave nothing
- running it from Atom neither, except when i pressed `Command-J` and `Command-P` where the graphic endly appeared !  
i tried to find to which command this shortcut corresponds, i found “join the lines” in the Edit/Lines menus for `Command J` and `find the file` for `Command P`, i dont really understand but it works.  
may I ask a question ?  
`using Plots` means that we use Plots, but why, then is plotlyjs() called ?  
in other therms, what is the diffence between `using Plots plotlysj()` and `using PlotlyJS` ?

by curiosity, i tried to adapt a former example with your technique :

```julia
using Plots
plotlyjs()
function contour1()
    x = y = [-2*pi + 4*pi*i/100 for i in 1:100]
    z = [sin(x[i]) * cos(y[j]) * sin(x[i]*x[i]+y[j]*y[j])/log(x[i]*x[i]+y[j]*y[j]+1)
         for i in 1:100 for j in 1:100]
    z_ = [z[i:i+99] for i in 1:100:10000]
    data = contour(;z=z_, x=x, y=y)
    plot(data)
end
display(contour1())

```

and then `Command J` and `Command P`.  
After `Command P`, an empty “Plots” tab appeared.

Vincent

---

<div class="post-metadata">

**Author:** ![vincent](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vincent/32/380_2.png) [@vincent](https://discourse.julialang.org/u/vincent)\
**Post date:** [December 27, 2016, 1:14pm UTC](https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134/22 "2016-12-27T13:14:32Z")

</div>

hi Seb  
your link lead me to this url : [https://github.com/JunoLab/Atom.jl/pull/76/commits/b4f1c555286fe8729d68fded9a489b223427318f](https://github.com/JunoLab/Atom.jl/pull/76/commits/b4f1c555286fe8729d68fded9a489b223427318f) where i found a code that i dont know what to do with  
should i type this code in a .jl file and just run it once as if was installing something ?  
Also, what is REPL ?  
thanks for your answer  
Vincent

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [December 27, 2016, 3:33pm UTC](https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134/23 "2016-12-27T15:33:02Z")

</div>

> [@vincent](#):
>
> using Plots means that we use Plots, but why, then is plotlyjs() called ?in other therms, what is the diffence between using Plots plotlysj() and using PlotlyJS ?

Plots with `plotlyjs()` uses the Plots API, so the same code will generally work with other backends as well, meaning you can switch them around. Additionally, Using Plots means you have access to the whole recipe system, which gives you “new plots” that don’t actually exist in PlotlyJS by default, like the ability to plot graphs, grouped bar plots, etc.

And just to be clear: you’re only having a problem in Juno?

```julia
using Plots; plotly()
plot(rand(10,10))

```

should work the first time in the REPL (it’s pretty reliable, not many dependencies there). If it doesn’t, try

```julia
Pkg.build("Plots")
using Plots; plotly()
plot(rand(10,10))

```

(the REPL is the term for “Julia in the terminal”, the most basic way of using Julia. Please type that in directly and not via a script or `include` just to isolate the problem first.)

---

<div class="post-metadata">

**Author:** ![vincent](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vincent/32/380_2.png) [@vincent](https://discourse.julialang.org/u/vincent)\
**Post date:** [December 27, 2016, 4:49pm UTC](https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134/24 "2016-12-27T16:49:21Z")

</div>

> [@ChrisRackauckas](#):
>
> 1. And just to be clear: you’re only having a problem in Juno?
> 
> 2. try :  
> `using Plots; plotly() plot(rand(10,10))`

Hi Cris  
Thank you for the explanation about `using Plots`

1. until there, i was not able to produce any graph with any way
2. now, i tried what you said, copy-pasting your code in the REPL (thank you for the explanation about this). The graph appeared in my default web browser.  
Now, i have copy-pasted the same code into an .jl file and runned it from the terminal, typing :  
`julia [path of the file]` but nothing appears in the browser.

Vincent

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [December 27, 2016, 5:04pm UTC](https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134/25 "2016-12-27T17:04:20Z")

</div>

Alright, we’re getting somewhere! Let me explain what’s happening with a script. In Julia, the plotting happens because the `plot()` command returns a plot object. However, there is a difference between running a command in a script, and running a command in the REPL. In the REPL:

```julia
a = 2

```

automatically returns, while

```julia
a = 2;

```

does not (like MATLAB). However, that would make you have to put `;` everywhere in a script, and so

```julia
a = 2

```

does now return `a` in a script. However, this means that `plot(...)` doesn’t actually return anything to show in a script.

So the next thing we should do is make sure it works for you inside of a script. Once again, I’ll use Plotly since it should always be working (if you have a working web browser). Now put

```julia
using Plots; plotly()
display(plot(rand(10,10)))

```

inside of a `.jl` file. Inside of the REPL, do `include("filename.jl")` (use `pwd()` to make sure you’re in the right directory, and `cd("...")` around if you need to). This should display the plot.

Now I am not sure about getting `julia filename.jl` to work directly from the terminal since Julia will exit when finishing its commands. Maybe that’s why it wasn’t working before? I generally just use Julia interactively (and I suspect many others do too).

---

<div class="post-metadata">

**Author:** ![vincent](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vincent/32/380_2.png) [@vincent](https://discourse.julialang.org/u/vincent)\
**Post date:** [December 27, 2016, 5:37pm UTC](https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134/26 "2016-12-27T17:37:41Z")

</div>

> [@ChrisRackauckas](#):
>
> does now return a in a script. However, this means that plot(…) doesn’t actually return anything to show in a script.
> 
> So the next thing we should do is make sure it works for you inside of a script. Once again, I’ll use Plotly since it should always be working (if you have a working web browser). Now put
> 
> ````using
> display(plot(rand(10,10)))```
> 
> inside of a .jl file. Inside of the REPL, do include("filename.jl") (use pwd() to make sure you're in the right directory, and cd("...") around if you need to). This should display the plot.
> 
> ````

hi Cris

````using
plot(rand(10,10))```
works fine now, not only in the REPL but also in a file .jl called the way you said, i.e. with `ìnclude("")` in the REPL.
and : 
```using Plots; plotly()
display(plot(rand(10,10)))```
works fine too this way.

ps i precize that i do as in the terminal, i.e. i just type `include("` and then i drag the file from the finder to the position of the cursor to have the absolute path.

now think i can work…

thanks very much

Vincent

Ps Plotly isn't free ? https://plot.ly/
````

---

<div class="post-metadata">

**Author:** ![bjarthur](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bjarthur/32/9638_2.png) [@bjarthur](https://discourse.julialang.org/u/bjarthur)\
**Post date:** [January 1, 2017, 11:44pm UTC](https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134/27 "2017-01-01T23:44:22Z")

</div>

vincent–

choosing between multiple solutions to the same problem is not unique to plotting or julia. there are numerous logging and benchmarking packages to choose from in julia for example, and other open-source languages like python have similar parallel efforts.

the first thing i do when confronted with such a choice is to check how many people “watch”, “star”, and “fork” each of the packages’ github page. then i click on the graphs tab of each package and see if it is actively maintained (ie there is a steady continuous stream of commits). a third key indicator i look for is how many people are involved, and who specifically they are-- do they also contribute to julia base? lastly, many package authors have attended a JuliaCon to promote their work, and youtube recordings of their talks are available.

it is not clear to me that Plots.jl is “state of the art” given these criteria. i personally prefer Gadfly.

---

<div class="post-metadata">

**Author:** ![purplishrock](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/purplishrock/32/13451_2.png) [@purplishrock](https://discourse.julialang.org/u/purplishrock)\
**Post date:** [January 4, 2017, 5:35am UTC](https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134/28 "2017-01-04T05:35:50Z")

</div>

I’m running firefox on linux and the plots on the following page

[http://gadflyjl.org/stable/man/plotting.html](http://gadflyjl.org/stable/man/plotting.html)

are displaying with fonts that are much too large. I also downloaded the latest version for 0.5 and got the same result when I ran the examples.

gadfly problem or firefox problem ?

---

<div class="post-metadata">

**Author:** ![mike](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mike/32/39_2.png) [@mike](https://discourse.julialang.org/u/mike)\
**Post date:** [January 4, 2017, 9:54am UTC](https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134/29 "2017-01-04T09:54:25Z")

</div>

> [@purplishrock](#):
>
> are displaying with fonts that are much too large

Do you have the “Minimum font size” setting (it’s found in Preferences under the “Content” tab and “Advanced…” button) set to something other than “None”? Changing that to “None” fixed it for me.

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [January 4, 2017, 10:13am UTC](https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134/30 "2017-01-04T10:13:47Z")

</div>

> [@bjarthur](#):
>
> the first thing i do when confronted with such a choice is to check how many people “watch”, “star”, and “fork” each of the packages’ github page. then i click on the graphs tab of each package and see if it is actively maintained (ie there is a steady continuous stream of commits). a third key indicator i look for is how many people are involved, and who specifically they are-- do they also contribute to julia base? lastly, many package authors have attended a JuliaCon to promote their work, and youtube recordings of their talks are available.
> 
> it is not clear to me that Plots.jl is “state of the art” given these criteria. i personally prefer Gadfly.

I think that’s the wrong criteria for most users. I think the right criteria is:

- it always works
- is fast
- has lots of features
- is easily extendable
- has readily available help

Gadfly satisfies none of those. There have been times where there was no developer working on it, and so I had long periods where it just wouldn’t even precompile on my machine. Gadfly is also notoriously slow. It does not have very many features: many things are very “do it yourself”, if it’s even possible (for example, you can’t do anything 3D with it). I never found it easy to extend, and if you do, you have a huge dependency. Lastly, I don’t know where to quickly find help.

On the other hand, all of these are satisfied by plots. Plots.jl always works for be because, by design, at least one backend will always work. Sure, there are months where PyPlot just won’t work, but then I just switch to Plotly or GR (with the same plotting code) and I’m fine. GR, GLVisualize, etc. backends are super fast, so Plots.jl is very fast (other than its startup time). It has tons of features, including [PlotRecipes.jl](https://github.com/JuliaPlots/PlotRecipes.jl) and [StatPlots.jl](https://github.com/JuliaPlots/StatPlots.jl) extension libraries (and things like [PlotThemes.jl](https://github.com/JuliaPlots/PlotThemes.jl)). You can extend Plots.jl for easy usage with your own package via the [recipe system](https://juliaplots.github.io/recipes/), and this does not make Plots.jl a dependency (only RecipesBase.jl, which is a one macro library). Lastly, if you ever need help, [there’s a lively chatroom](https://gitter.im/tbreloff/Plots.jl) where people answer questions pretty quickly.

With all of those facts, I don’t see how Gadfly can be called the state of the art. In fact, I find it misleading to point new users towards Gadfly since it doesn’t show Julia in its best light: it’s not feature-filled, fast, and infinitely extendable like you’d expect from a Julia library.

But of course, they’re very different beasts. Plots.jl isn’t trying to build the whole graphics backend: it’s just trying to give you a good plotting experience. And you can tell that 100% of the time has gone towards making the plotting API.

---

<div class="post-metadata">

**Author:** ![Palli](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/palli/32/3380_2.png) [@Palli](https://discourse.julialang.org/u/Palli)\
**Post date:** [January 4, 2017, 10:28am UTC](https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134/31 "2017-01-04T10:28:03Z")

</div>

> [@vincent](#):
>
> Pkg.add(“Plots”)  
> Pkg.add(“PlotlyJS”)

I was also a little confused about plots… [I know of, but wasn’t using Plots]; Should you then, for sure do (not using PlotsJS? neither worked… with the rest)?:

```julia
julia> using Plotly
[..]
INFO: Precompiling module PlotlyJS.
WARNING: using Lazy.remove in module AtomShell conflicts with an existing identifier.

```

None of the examples I tried there work e.g.:

[Histograms in Julia](https://plot.ly/julia/histograms/) [I just needed a quick histogram, not even a plot, Google: “Julia histogram” finds this…]

```julia
[..]
julia> response = Plotly.plot(data, ["filename" => "basic-histogram", "fileopt" => "overwrite"])
ERROR: MethodError: no method matching PlotlyJS.Plot{TT<:PlotlyJS.AbstractTrace}(::Array{Array{Pair{String,B},1},1}, ::Array{Pair{String,String},1})
Closest candidates are:
  PlotlyJS.Plot{TT<:PlotlyJS.AbstractTrace}{T<:PlotlyJS.AbstractTrace}(::Array{T<:PlotlyJS.AbstractTrace,1}, ::Any; style) at /home/qwerty/.julia/v0.5/PlotlyJS/src/PlotlyJS.jl:64
  PlotlyJS.Plot{TT<:PlotlyJS.AbstractTrace}(::PlotlyJS.AbstractTrace, ::Any; style) at /home/qwerty/.julia/v0.5/PlotlyJS/src/PlotlyJS.jl:69
  PlotlyJS.Plot{TT<:PlotlyJS.AbstractTrace}{T}(::Any) at sysimg.jl:53
 in #plot#36(::Array{Any,1}, ::Function, ::Array{Array{Pair{String,B},1},1}, ::Vararg{Any,N}) at /home/qwerty/.julia/v0.5/PlotlyJS/src/display.jl:75
 in plot(::Array{Array{Pair{String,B},1},1}, ::Array{Pair{String,String},1}) at /home/qwerty/.julia/v0.5/PlotlyJS/src/display.jl:75

```

EDIT: I overlooked [Getting started with plotly in Julia](https://plot.ly/julia/getting-started/)

I followed the instructions to the letter,\* just to make sure (up to then skipped to actual plotting; guess this shouldn’t matter, but indication instructions aer for 0.4?):

julia\> Plotly.set\_credentials\_file({“username”=\>“DemoAccount”,“api\_key”=\>“lr1c37zw81”})  
ERROR: syntax: { } vector syntax is discontinued

- I renamed .julia for now, to get around this: I guess this wouldn’t have worked (and is outdated, conflicts with github Pkg.add recommendation) either (I’ll find correct Pkg.remove…):

```julia
julia> Pkg.clone("https://github.com/plotly/Plotly.jl")
INFO: Cloning Plotly from https://github.com/plotly/Plotly.jl
ERROR: Plotly already exists

```

I want to be sure I’m following (correct?) instructions, before I point out errors ot the people at plot.ly. [Not sure how, can anyone confirm info doesn’t work, and maybe has priviledges to correct?]

---

<div class="post-metadata">

**Author:** ![ihnorton](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ihnorton/32/26_2.png) [@ihnorton](https://discourse.julialang.org/u/ihnorton)\
**Post date:** [January 4, 2017, 2:35pm UTC](https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134/32 "2017-01-04T14:35:49Z")

</div>

Split this topic on January 4, 2017, 2:35pm UTC

10 posts were split to a new topic: [UnicodePlots examples; Plotly licensing](https://discourse.julialang.org/t/unicodeplots-examples-plotly-licensing/1280)

---

<div class="post-metadata">

**Author:** ![Palli](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/palli/32/3380_2.png) [@Palli](https://discourse.julialang.org/u/Palli)\
**Post date:** [January 4, 2017, 11:08am UTC](https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134/35 "2017-01-04T11:08:59Z")

</div>

On Plots.jl:

> [@ChrisRackauckas](#):
>
> I think that’s the wrong criteria for most users. I think the right criteria is:
> 
> - it always works
> - is fast

Just making one note, while Plots.jl seems awesome (not yet tried… should); you’re comparing apples to an orange.

Plots.jl is a wrapper for many, even I believe Gadfly, before dropped as a backend. Gadfly (and others) are only (a wrapper for) one plotting capability.

Fast must depend on the backend. Not sure about always works for any feature for any backend… but you can switch them. Not sure there’s a lowest common-denominator issue… but at least non-native API(?).

---

<div class="post-metadata">

**Author:** ![mkborregaard](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkborregaard/32/556_2.png) [@mkborregaard](https://discourse.julialang.org/u/mkborregaard)\
**Post date:** [January 4, 2017, 11:57am UTC](https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134/40 "2017-01-04T11:57:17Z")

</div>

I think it is fair to say that Gadfly and Plots (with backends, which BTW does not include Gadfly) are both state-of-the-art and should be preferred entry points for new users, as most julia users seem to prefer one of these plotting packages. They are really quite different things, I agree (I share @ChrisRackauckas preference for Plots, but that is beside the point). So far an issue with Plots has been that none of the backends are ‘pure’ julia, but GLVisualise is set to change that when it matures 🙂

I really don’t know why the official julialang page should be pointing new users to PyPlot, though. There are lots of good plotting packages for julia (used by themselves or as Plots backends), and I don’t see any reason to prefer PyPlot among those.

---

<div class="post-metadata">

**Author:** ![tknopp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tknopp/32/3569_2.png) [@tknopp](https://discourse.julialang.org/u/tknopp)\
**Post date:** [January 4, 2017, 12:05pm UTC](https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134/41 "2017-01-04T12:05:43Z")

</div>

Whats wrong with PyPlot? Its a pretty mature package and Matplotlib is a widespread piece of software.

---

<div class="post-metadata">

**Author:** ![mkborregaard](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkborregaard/32/556_2.png) [@mkborregaard](https://discourse.julialang.org/u/mkborregaard)\
**Post date:** [January 4, 2017, 12:07pm UTC](https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134/42 "2017-01-04T12:07:45Z")

</div>

Absolutely nothing. I use it every day. But is there any reason to prefer PyPlot over e.g. GR or PlotlyJS?

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [January 4, 2017, 3:04pm UTC](https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134/43 "2017-01-04T15:04:35Z")

</div>

> [@mkborregaard](#):
>
> I really don’t know why the official julialang page should be pointing new users to PyPlot, though. There are lots of good plotting packages for julia (used by themselves or as Plots backends), and I don’t see any reason to prefer PyPlot among those.

> [@tknopp](#):
>
> Whats wrong with PyPlot? Its a pretty mature package and Matplotlib is a widespread piece of software.

It seems to be running joke in the Gitter channel for who has more PyPlot issues. I tend to have PyPlot “unusable” for long periods of times for seemingly random reasons.

The latest in the stream of never-ending PyPlot issues had an easy fix if you wanted to muck with a bunch of things:

> <https://github.com/JuliaPy/PyPlot.jl/issues/251>
>
> \`\`\` julia
> julia\> using PyPlot
> INFO: Precompiling module Conda.
> INFO: Recompiling… stale cache file C:\\Users\\Chris\\.julia\\lib\\v0.6\\PyPlot.ji for module PyPlot.
> C:\\Users\\Chris\\.julia\\v0.6\\Conda\\deps\\usr\\lib\\site-packages\\matplotlib\\\_\_init\_\_.py:1357: UserWarning: This call to matplotlib.use() has no effect
> because the backend has already been chosen;
> matplotlib.use() must be called \*before\* pylab, matplotlib.pyplot,
> or matplotlib.backends is imported for the first time.
> 
> warnings.warn(\_use\_error\_msg)
> ERROR: InitError: PyError (:PyImport\_ImportModule) \<class 'ImportError'\>
> ImportError("cannot import name 'QtCore'",)
> File "C:\\Users\\Chris\\.julia\\v0.6\\Conda\\deps\\usr\\lib\\site-packages\\matplotlib\\pyplot.py", line 114, in \<module\>
> \_backend\_mod, new\_figure\_manager, draw\_if\_interactive, \_show = pylab\_setup()
> File "C:\\Users\\Chris\\.julia\\v0.6\\Conda\\deps\\usr\\lib\\site-packages\\matplotlib\\backends\\\_\_init\_\_.py", line 32, in pylab\_setup
> globals(),locals(),\[backend\_name\],0)
> File "C:\\Users\\Chris\\.julia\\v0.6\\Conda\\deps\\usr\\lib\\site-packages\\matplotlib\\backends\\backend\_qt4agg.py", line 18, in \<module\>
> from .backend\_qt5agg import FigureCanvasQTAggBase as \_FigureCanvasQTAggBase
> File "C:\\Users\\Chris\\.julia\\v0.6\\Conda\\deps\\usr\\lib\\site-packages\\matplotlib\\backends\\backend\_qt5agg.py", line 16, in \<module\>
> from .backend\_qt5 import QtCore
> File "C:\\Users\\Chris\\.julia\\v0.6\\Conda\\deps\\usr\\lib\\site-packages\\matplotlib\\backends\\backend\_qt5.py", line 31, in \<module\>
> from .qt\_compat import QtCore, QtGui, QtWidgets, \_getSaveFileName, \_\_version\_\_
> File "C:\\Users\\Chris\\.julia\\v0.6\\Conda\\deps\\usr\\lib\\site-packages\\matplotlib\\backends\\qt\_compat.py", line 137, in \<module\>
> from PyQt4 import QtCore, QtGui
> 
> in pyerr\_check at C:\\Users\\Chris\\.julia\\v0.6\\PyCall\\src\\exception.jl:56 \[inlined\]
> in pyerr\_check at C:\\Users\\Chris\\.julia\\v0.6\\PyCall\\src\\exception.jl:61 \[inlined\]
> in macro expansion at C:\\Users\\Chris\\.julia\\v0.6\\PyCall\\src\\exception.jl:79 \[inlined\]
> in pyimport(::String) at C:\\Users\\Chris\\.julia\\v0.6\\PyCall\\src\\PyCall.jl:387
> in \_\_init\_\_() at C:\\Users\\Chris\\.julia\\v0.6\\PyPlot\\src\\PyPlot.jl:235
> in \_include\_from\_serialized(::String) at .\\loading.jl:150
> in \_require\_from\_serialized(::Int64, ::Symbol, ::String, ::Bool) at .\\loading.jl:187
> in require(::Symbol) at .\\loading.jl:425
> during initialization of module PyPlot
> \`\`\`
> 
> This is on v0.6, with master for PyPlot, Conda, and PyCall, with the automated matplotlib installation.

> <https://github.com/JuliaPy/PyPlot.jl/issues/268>
>
> In my matplotlibrc I have 
> \`backend : Qt5Agg\`
> 
> Plotting in Python works fine.… 
> 
> \`\`\`julia
> julia\> versioninfo()
> Julia Version 0.6.0-dev.1636
> Commit 99b6a8c\* (2016-12-20 13:46 UTC)
> Platform Info:
> OS: Windows (x86\_64-w64-mingw32)
> CPU: Intel(R) Core(TM) i7-4510U CPU @ 2.00GHz
> WORD\_SIZE: 64
> BLAS: libopenblas (USE64BITINT DYNAMIC\_ARCH NO\_AFFINITY Haswell)
> LAPACK: libopenblas64\_
> LIBM: libopenlibm
> LLVM: libLLVM-3.7.1 (ORCJIT, haswell)
> \`\`\`
> 
> \`\`\`julia
> julia\> using PyCall; PyCall.pyprogramname
> INFO: Recompiling stale cache file C:\\Users\\Mus\\.julia\\lib\\v0.6\\PyCall.ji for module PyCall.
> "C:\\\\Anaconda3\\\\python.exe"
> 
> julia\> PyDict(pyimport("matplotlib")\["rcParams"\])\["backend"\]
> "Qt5Agg"
> 
> julia\> using PyPlot
> INFO: Recompiling stale cache file C:\\Users\\Mus\\.julia\\lib\\v0.6\\PyPlot.ji for module PyPlot.
> 
> julia\> plot(randn(10))
> This application failed to start because it could not find or load the Qt platform plugin "windows"
> in "".
> 
> Reinstalling the application may fix this problem.
> \`\`\`

The other plotting packages just work? And Plotly is prettier while GR is faster? I just don’t see the point of PyPlot anymore. But maybe that’s just my Plots.jl background talking: I’ve tested all of the different background so often that now I have opinions for which one is best to use around breakfast time.

---

<div class="post-metadata">

**Author:** ![Evizero](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/evizero/32/10118_2.png) [@Evizero](https://discourse.julialang.org/u/Evizero)\
**Post date:** [January 4, 2017, 3:29pm UTC](https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134/44 "2017-01-04T15:29:35Z")

</div>

I disagree on the pyplot comments. My experience even is in the other direction lately. In the sense that I often find myself using pyplot as Plots.jl backend in the end, as it gave for those particular purposes the most visually pleasing results (such as this wall of pyplot produced loss-function plots: [http://lossesjl.readthedocs.io/en/latest/losses/distance.html](http://lossesjl.readthedocs.io/en/latest/losses/distance.html)). My guess is that plotting is one of those topics where it is really easy to develop strong opinions on.

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [January 4, 2017, 3:40pm UTC](https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134/45 "2017-01-04T15:40:04Z")

</div>

I think all this debate is kinda silly, about which plotting package is the best etc. Are we in high school or something? Of course PGFPlots is the best…

(ref [Andrei Alexandrescu - best text editor - YouTube](https://youtu.be/qzC5H5xrr-E?t=56))

---

<div class="post-metadata">

**Author:** ![fabiangans](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fabiangans/32/2624_2.png) [@fabiangans](https://discourse.julialang.org/u/fabiangans)\
**Post date:** [January 4, 2017, 3:46pm UTC](https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134/46 "2017-01-04T15:46:53Z")

</div>

I think there is only one way to find out which plotting package is the best: a **poll** 😀

[Previous page](https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134.md?page=1)

[Next page](https://discourse.julialang.org/t/how-to-choose-a-plotting-package/1134.md?page=3)
