# Using PyPlot vs Plots

**URL:** https://discourse.julialang.org/t/using-pyplot-vs-plots/28313
**Category:** New to Julia
**Tags:** plotting
**Created:** [September 3, 2019, 5:23am UTC](https://discourse.julialang.org/t/using-pyplot-vs-plots/28313 "2019-09-03T05:23:28Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![henry2004y](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/henry2004y/32/9284_2.png) [@henry2004y](https://discourse.julialang.org/u/henry2004y)
#### Post date: [September 3, 2019, 5:23am UTC](https://discourse.julialang.org/t/using-pyplot-vs-plots/28313/1 "2019-09-03T05:23:28Z")

</div>

Hi,

When I first learned Julia, I was guided towards the Plots package for visualization. Even though it has multiple options of the backend libraries, I found it hard for me as a user who is more familiar with the MATLAB and Python plotting syntax to use it smoothly. After a while I found the PyPlot package, which is more stable and robust currently so I’m mostly using it for plotting now.

Does the Plots package actually supports all the features in PyPlot? For example, can I call streamplot from Plots? How can I do streamline plotting in Plots?

Is there any general recommendation for using the different plotting packages?

---

<div class="post-metadata">

### Author: ![tobias.knopp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tobias.knopp/32/7551_2.png) [@tobias.knopp](https://discourse.julialang.org/u/tobias.knopp)
#### Post date: [September 3, 2019, 6:35am UTC](https://discourse.julialang.org/t/using-pyplot-vs-plots/28313/2 "2019-09-03T06:35:05Z")

</div>

No there is no general recommendation which package to use. If you are satisfied with PyPlot, just stick with that. It has the advantage that you can transfer most python examples of Matplotlib directly to Julia.

---

<div class="post-metadata">

### Author: ![MatFi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/matfi/32/10002_2.png) [@MatFi](https://discourse.julialang.org/u/MatFi)
#### Post date: [September 3, 2019, 7:13am UTC](https://discourse.julialang.org/t/using-pyplot-vs-plots/28313/3 "2019-09-03T07:13:01Z")

</div>

So basically all [backends for Plots.](https://docs.juliaplots.org/latest/backends/)jl can be used in a stand alone variant. Here the overview from the link above:

| If you require… | … then use… |
| --- | --- |
| features | [PyPlot](https://github.com/JuliaPy/PyPlot.jl), [Plotly(JS)](https://github.com/plotly/Plotly.jl), [GR](https://github.com/jheinen/GR.jl) |
| speed | [GR](https://github.com/jheinen/GR.jl), [InspectDR](https://github.com/ma-laforge/InspectDR.jl) |
| interactivity | [Plotly(JS)](https://github.com/plotly/Plotly.jl), [PyPlot,](https://github.com/JuliaPy/PyPlot.jl) [InspectDR](https://github.com/ma-laforge/InspectDR.jl) |
| beauty | [Plotly(JS)](https://github.com/plotly/Plotly.jl), [PGFPlots](https://github.com/JuliaTeX/PGFPlots.jl) |
| REPL Plotting | [UnicodePlots](https://github.com/Evizero/UnicodePlots.jl) |
| 3D plots | [PyPlot](https://github.com/JuliaPy/PyPlot.jl), [GR](https://github.com/jheinen/GR.jl), [Plotly(JS)](https://github.com/plotly/Plotly.jl) |
| a GUI Window | [GR](https://github.com/jheinen/GR.jl), [PyPlot,](https://github.com/JuliaPy/PyPlot.jl) [PlotlyJS](https://github.com/plotly/Plotly.jl), [InspectDR](https://github.com/ma-laforge/InspectDR.jl) |
| a small footprint | [UnicodePlots](https://github.com/Evizero/UnicodePlots.jl), [Plotly](https://github.com/plotly/Plotly.jl) |
| plot+data → `.hdf5` file | [HDF5](https://github.com/JuliaIO/HDF5.jl) |

While this Backends ar all supported by Plots.jl there are even more plotting/visulaisation packages:  
[Gadfly.jl](https://github.com/GiovineItalia/Gadfly.jl)  
[Makie.jl](https://github.com/JuliaPlots/Makie.jl)  
[Winston.jl](https://github.com/JuliaGraphics/Winston.jl)  
[KittyTerminalImages.jl](https://github.com/simonschoelly/KittyTerminalImages.jl)

There are even more (discontinued) packages, so this list ist not complete.

> Does the Plots package actually supports all the features in PyPlot? For example, can I call streamplot from Plots? How can I do streamline plotting in Plots?

I don’t think so. But as @tobias.knopp wrote already, it ist absolutely fine to stick with PyPlot if it fulfills its purpose. Personally I usually use a library where the documentation is extensive

---

<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: [September 3, 2019, 10:50am UTC](https://discourse.julialang.org/t/using-pyplot-vs-plots/28313/4 "2019-09-03T10:50:10Z")

</div>

Plots is a general system for plotting in Julia which has a nice recipe system that allows packages to easily setup “auto-plotting”. There’s a lot documented with it since `plot(x)` “just works” with a lot of package outputs, even if the types are recursively complicated. That said, it isn’t without its issues. If you’re familiar with PyPlot though, feel free to write routines to extract vectors and plot the vectors: it’s a perfectly fine package.

Plots.jl doesn’t wrap all of the features, but it also extends the backends with “series recipes”. For example, grouped bar plots is something it’s able to add to the backends by drawing it directly. However, one thing that it’s missing is full support for trisurfs and quiver plots, which PyPlot.jl does quite nicely. GR.jl is also a good plotting package, I’d usually prefer it since it’s a whole lot faster on big data, but last I looked its trisurfs needed a few more pieces to really work in FEM plotting contexts. Makie.jl is a pure Julia solution with lots of support for interactivity, direct drawing, 3D, and the works, but it still needs a little polish here and there.

The hope is that Makie.jl soon gets a recipe system and we’d basically get the best of all worlds. It would also allow type-codifying a lot of the weirder conventions that usually happen in plotting packages as long lists of arrays.

---

<div class="post-metadata">

### Author: ![yoninazarathy](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yoninazarathy/32/10086_2.png) [@yoninazarathy](https://discourse.julialang.org/u/yoninazarathy)
#### Post date: [September 3, 2019, 11:04am UTC](https://discourse.julialang.org/t/using-pyplot-vs-plots/28313/5 "2019-09-03T11:04:05Z")

</div>

> [@henry2004y](#):
>
> Is there any general recommendation for using the different plotting packages?

In the past two months, Hayden Klok and I have been revising our [“Statistics with Julia” draft](https://people.smp.uq.edu.au/YoniNazarathy/julia-stats/StatisticsWithJulia.pdf) to use Plots.jl (and StatsPlots.jl) instead of PyPlot.jl. At the moment the online draft version still uses PyPlot, however we’ll be able to update to the new version within the next few weeks.

Our experience was very positive. In general, converting the code base from PyPlot to Plots.jl reduced the code length by about 20% while keeping the same quality of images.

---

<div class="post-metadata">

### Author: ![henry2004y](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/henry2004y/32/9284_2.png) [@henry2004y](https://discourse.julialang.org/u/henry2004y)
#### Post date: [September 4, 2019, 4:22pm UTC](https://discourse.julialang.org/t/using-pyplot-vs-plots/28313/6 "2019-09-04T16:22:40Z")

</div>

Glad to hear that. I read the first few chapters last month. Looking forward to the new version!

---

<div class="post-metadata">

### Author: ![josimar](https://avatars.discourse-cdn.com/v4/letter/j/cab0a1/32.png) [@josimar](https://discourse.julialang.org/u/josimar)
#### Post date: [May 11, 2020, 2:25pm UTC](https://discourse.julialang.org/t/using-pyplot-vs-plots/28313/7 "2020-05-11T14:25:14Z")

</div>

@yoninazarathy, do you have an estimate of when your book will be published ? The draft looks very interesting, thanks for sharing.

---

<div class="post-metadata">

### Author: ![Bart\_van\_de\_Lint](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bart_van_de_lint/32/212161_2.png) [@Bart\_van\_de\_Lint](https://discourse.julialang.org/u/Bart_van_de_Lint)
#### Post date: [July 31, 2025, 10:12am UTC](https://discourse.julialang.org/t/using-pyplot-vs-plots/28313/8 "2025-07-31T10:12:38Z")

</div>

> [@ChrisRackauckas](#):
>
> The hope is that [Makie.jl](https://juliaregistries.github.io/General/packages/redirect_to_repo/Makie) soon gets a recipe system and we’d basically get the best of all worlds.

@ChrisRackauckas Would you say that the current [Makie Recipes](https://docs.makie.org/stable/explanations/recipes.html) achieve the “best of both worlds”?

---

<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: [July 31, 2025, 10:40am UTC](https://discourse.julialang.org/t/using-pyplot-vs-plots/28313/9 "2025-07-31T10:40:38Z")

</div>

Yeah they are pretty good now. I need to learn it better but @asinghvi17 has been helping SciML get Makie plots and it all seems fine now.
