# Choosing a plotting library

**URL:** <https://discourse.julialang.org/t/choosing-a-plotting-library/97556>\
**Category:** General Usage\
**Tags:** plotting, plots, makie, pythonplot\
**Created:** [April 16, 2023, 6:52pm UTC](https://discourse.julialang.org/t/choosing-a-plotting-library/97556 "2023-04-16T18:52:07Z")\
**Posts on this page:** 11\
**Page:** 2

<div class="post-metadata">

**Author:** ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)\
**Post date:** [April 17, 2023, 8:48pm UTC](https://discourse.julialang.org/t/choosing-a-plotting-library/97556/21 "2023-04-17T20:48:44Z")

</div>

Linking [PlotlyLight.jl](https://discourse.julialang.org/t/ann-announcing-plotlylight-jl/76549) announcement.

---

<div class="post-metadata">

**Author:** ![adienes](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/adienes/32/37459_2.png) [@adienes](https://discourse.julialang.org/u/adienes)\
**Post date:** [April 17, 2023, 8:49pm UTC](https://discourse.julialang.org/t/choosing-a-plotting-library/97556/22 "2023-04-17T20:49:49Z")

</div>

> [@ufechner7](#):
>
> This is what I mean with the low quality of Julia plotting packages at the current point in time, compared with mature packages like matplotlib (PythonPlot).

just as much as I struggle to use Makie for simple things, I also really struggle to use matplotlib for complicated things. I don’t think it’s totally fair to call it low quality in comparison, they just have different strengths. no pain no gain

---

<div class="post-metadata">

**Author:** ![BeastyBlacksmith](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/beastyblacksmith/32/4741_2.png) [@BeastyBlacksmith](https://discourse.julialang.org/u/BeastyBlacksmith)\
**Post date:** [April 19, 2023, 9:37am UTC](https://discourse.julialang.org/t/choosing-a-plotting-library/97556/23 "2023-04-19T09:37:30Z")

</div>

> [@ufechner7](#):
>
> Why? Why have things to be so complicated? Why can Plots.jl not see that there is a whitespace that is not needed?

This is because Plots.jl does not have (and will never have) the same amount of information as the native backend. In this case, Plots.jl does not know about the window size that the plot will be displayed in. It will produce an image with the default size and pass that to the display, whatever that is.

EDIT:  
Though the real problem here is having a static figure size to begin with, but thats a not so easy to solve problem.

---

<div class="post-metadata">

**Author:** ![aplavin](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/aplavin/32/222056_2.png) [@aplavin](https://discourse.julialang.org/u/aplavin)\
**Post date:** [April 19, 2023, 9:57am UTC](https://discourse.julialang.org/t/choosing-a-plotting-library/97556/24 "2023-04-19T09:57:52Z")

</div>

Yeah, I don’t think other languages have an ecosystem similar to Plots. So that one can use the same code to make plots with very different backend libraries - and this works fine for basic plots.  
It’s not clear IMO whether this is actually needed, compared to a few separate plotting libraries that have all the native information they need (eg `matplotlib`, `Makie`, `gnuplot`, `VegaLite`, etc), and each with its fundamental (dis)advantages. But still, `Plots` in Julia is a pretty unique example of what’s possible.

---

<div class="post-metadata">

**Author:** ![Balinus](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/balinus/32/243_2.png) [@Balinus](https://discourse.julialang.org/u/Balinus)\
**Post date:** [April 19, 2023, 2:34pm UTC](https://discourse.julialang.org/t/choosing-a-plotting-library/97556/25 "2023-04-19T14:34:15Z")

</div>

I totally agree with this. Matplotlib, be it in Python or through PyPlot.jl is very simple for basic plots but when you need to customize, it is endless workaround code. Makie is simpler to use for complex plots imho.

---

<div class="post-metadata">

**Author:** ![Jake](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jake/32/46007_2.png) [@Jake](https://discourse.julialang.org/u/Jake)\
**Post date:** [April 19, 2023, 8:42pm UTC](https://discourse.julialang.org/t/choosing-a-plotting-library/97556/26 "2023-04-19T20:42:17Z")

</div>

I am wondering if you can change the title of this thread to make in easier for searching. Something like “Optimum Julia Plotting Library”. There is good information that should be easy to find.

---

<div class="post-metadata">

**Author:** ![Jake](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jake/32/46007_2.png) [@Jake](https://discourse.julialang.org/u/Jake)\
**Post date:** [April 19, 2023, 8:43pm UTC](https://discourse.julialang.org/t/choosing-a-plotting-library/97556/27 "2023-04-19T20:43:38Z")

</div>

> [@mbaz](#):
>
> I think both Gnuplot.jl and Gaston.jl have all those features (depending on the specifics of 5 and 6).

I have looked for the ability to use Datatips in Gnuplot and have not been able to find out how.

---

<div class="post-metadata">

**Author:** ![mbaz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mbaz/32/17295_2.png) [@mbaz](https://discourse.julialang.org/u/mbaz)\
**Post date:** [April 19, 2023, 9:49pm UTC](https://discourse.julialang.org/t/choosing-a-plotting-library/97556/28 "2023-04-19T21:49:03Z")

</div>

Certainly nothing as fancy as Matlab, but you can get the mouse coordinates and you can annotate points with mouse middle-click:

 ![image](https://global.discourse-cdn.com/julialang/original/3X/0/9/097ef87bcb1f4f3b271812410c9a12232e069618.png)

---

<div class="post-metadata">

**Author:** ![jheinen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jheinen/32/2787_2.png) [@jheinen](https://discourse.julialang.org/u/jheinen)\
**Post date:** [April 21, 2023, 2:30pm UTC](https://discourse.julialang.org/t/choosing-a-plotting-library/97556/29 "2023-04-21T14:30:48Z")

</div>

In the meantime 2, 3 and 4 are supported in GR. See [How to achieve better interactivity with GR | The GR Framework Blog](https://gr-framework.org/blog/posts/grm.html)

---

<div class="post-metadata">

**Author:** ![roland-KA](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/roland-ka/32/33873_2.png) [@roland-KA](https://discourse.julialang.org/u/roland-KA)\
**Post date:** [April 21, 2023, 3:34pm UTC](https://discourse.julialang.org/t/choosing-a-plotting-library/97556/30 "2023-04-21T15:34:13Z")

</div>

Perhaps this is also of interest in this context: I’ve done a comparison of several Julia graphics packages which are based on the Grammar of Graphics (like ggplot) and published the comparison on [towardsdatascience.com](http://towardsdatascience.com) in a series of articles. Up to now the following articles are available (including Pluto notebooks with the examples presented):

- [The Grammar of Graphics or how to do ggplot-style plotting in Julia](https://medium.com/towards-data-science/the-grammar-of-graphics-or-how-to-do-ggplot-style-plotting-in-julia-1b0ac2162c82)
- [Statistical Plotting with Juli:. Gadfly.jl](https://medium.com/towards-data-science/statistical-plotting-with-julia-gadfly-jl-39582f91d7cc)
- [Statistical Plotting with Julia: VegaLite.jl](https://medium.com/towards-data-science/statistical-plotting-with-julia-vegalite-jl-ad6fda253215)
- [Statistical Plotting with Julia: AlgebraOfGraphics.jl](https://medium.com/towards-data-science/statistical-plotting-with-julia-algebraofgraphics-jl-4ead1507c638); this includes also some examples based on Makie.jl

---

<div class="post-metadata">

**Author:** ![airpmb](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/airpmb/32/7826_2.png) [@airpmb](https://discourse.julialang.org/u/airpmb)\
**Post date:** [April 21, 2023, 4:31pm UTC](https://discourse.julialang.org/t/choosing-a-plotting-library/97556/31 "2023-04-21T16:31:35Z")

</div>

It’s not a pure Julia solution but [PlotJuggler](https://github.com/facontidavide/PlotJuggler) is a really excellent tool that is worth considering for some use cases.

[Previous page](https://discourse.julialang.org/t/choosing-a-plotting-library/97556.md?page=1)
