[HN Gopher] What's new in Matplotlib 3.7
___________________________________________________________________
What's new in Matplotlib 3.7
Author : todsacerdoti
Score : 158 points
Date : 2023-02-15 12:31 UTC (10 hours ago)
(HTM) web link (matplotlib.org)
(TXT) w3m dump (matplotlib.org)
| postexitus wrote:
| I won't touch Matplotlib with a 6 yard stick when there is
| ggplot.
| cuteboy19 wrote:
| Matplotlib combines the ease of use of MATLAB with the
| engineering precision of ... MATLAB. At least the programmers
| won't feel like tearing their hair out at the lunacy of MATLAB.
|
| The only improvement could be to export the generated figures
| into excel so that we can make minor touchups manually.
| version_five wrote:
| > minor touchups manually
|
| That's what I liked so much about matlab. You could generate
| figures programmatically and set the fonts and lines styles and
| whatnot, and then could just nudge stuff around in the figure
| if it wasn't how you wanted (plus retrieve that info).
| ok123456 wrote:
| The figure editor is the only real thing I miss from matlab.
| That and the ability to rotate the axes of plots
| interactively.
|
| The rest of the language and the platform though? Awful.
| version_five wrote:
| I mostly used matlab for fourier transforming data and
| plotting it, with some occasional image processing thrown
| in and a few "simulations" in the sense of calculating some
| function at a bunch of points. For all of that, I thought
| it was great.
|
| I saw people getting into make real applications, using the
| gui functionality and whatnot, it never felt like the right
| tool for something like that.
| ok123456 wrote:
| Outside of the core language of a glue for a bunch of
| numerical routines and stuff to plot them, it's a
| Frankenstein's monster.
|
| You never know if the script you send someone will work
| right, because everyone has different toolbox options,
| and everything is in the global namespace. It has some
| OOP features bolted on to it, but it always looked worse
| than Perl5.
|
| The core language is straight out of the mid-80s. The
| only real upgrade it got was it can finally broadcast
| matrix dimensions. Before that, you had people trying to
| 'vectorize' their code with 'repmat'.
|
| Despite all of its shortcomings, especially with
| packaging, I'll take scientific python over that any day.
| helmholtz wrote:
| Bah. Each time this comes up, people are quick to bash on
| Matlab. I won't stand for it. Matlab is not many things. It is
| certainly not all things to all men. But it is Fucking.
| Productive. for the kinds of quick numerical analyses that
| engineers often have to do. There is a function for everything
| and the kitchen sink, the syntax is simple as hell, there is a
| real IDE, and it gets out of your way.
|
| I've tried all the rest. I've tried Julia. The tooling, my god,
| it is woeful. The famous Time To First Plot. I've tried Python.
| Doesn't hold a candle to Matlab for the ease with which you can
| manipulate matrices and vectors.
|
| Matlab is far from perfect, but fuck it, it's an amazing tool
| for being productive.
| cuteboy19 wrote:
| Oh I agree, I only complain because I use it. By the way it's
| not Matlab but MATLAB. The name presumably comes from the
| Hindi exclamation for when you don't understand something.
| helmholtz wrote:
| Hahaha. I'm Indian, so that joke is familiar :) They should
| have just stuck a question mark at the end of it to
| represent all the leet programmers who couldn't fathom how
| a language could possibly dare to be 1-indexed.
| bee_rider wrote:
| Output an eps, then you can correct any issues manually in a
| text editor.
| plus wrote:
| In the past, I've saved Matplotlib figures to .svg so I could
| touch them up in Inkscape. Not the most ergonomic process, but
| when push comes to shove it is workable.
| leni536 wrote:
| output in svg, touch up in inkscape
| nicolapede wrote:
| Matplotlib has been replaced by tikz [0] for most of the figures
| I need to generate (they would feed LaTeX docs anyway).
|
| [0] https://tikz.dev/
| eigenman wrote:
| I've adapted the same work flow as well. It's really nice to
| have one script that generates data (often taking a few minutes
| or hours) and then another (in TeX) that configures display.
| That way when I recycle plots from papers into slides for a
| talk, I can reconfigure these easily.
| bjourne wrote:
| Tikz falls short when you have thousands of data points and/or
| need to do some scripting or filtering of the data. Scripting
| things is much nicer in Python than TeX.
| vouaobrasil wrote:
| I have tried so many plotting packages including Matplotlib but
| also others like R's base plotting, ggplot, Mathematica's
| plotting, etc. and I have to say I really dislike all of them. I
| am not sure why, but they all seem very counterintuitive compared
| to the way my mind things about plotting. This is _especially_
| true when it comes to formatting the plot. How I wish there were
| sane defaults for text size, etc.
|
| As much as I like Python for it's fairly clean and elegant
| syntax, I actually prefer making charts in Excel/OpenOffice. I
| would love it if someone made a hybrid model where you could put
| plotting into code, but yet once the basic plot was created, a
| GUI could be used to modify the appearance of the plot without
| remembering the syntax for all the graphical parameters.
|
| Maybe it could be a system where you run the code, and once the
| plot function is run in "interactive mode", an elegant GUI comes
| up and allows you to modify all the graphical parameters, and
| puts the required code into the plot function as parameters.
| saboot wrote:
| I suppose I'm the minority of people that enjoy using Matplotlib.
| I dont want a 'simplified' interface, I want to be able to do
| nearly anything and matplotlib provides that to me.
| patrick451 wrote:
| Of all the python plotting packages I have tried, matplotlib is
| still my favorite. A large part of this is that's one of the few
| that doesn't insist on using a web browoser. My only complaint
| with it is I wish the plots were more interactive. What I really
| want is the speed and API of matplotlib with the interactivity of
| plotly but without the web browser. I think matlab may be the
| only thing that comes close to that.
| resiros wrote:
| Matplotlib is still by far the most complicated library I have
| used in my fairly long career (10+ years). I worked with pieces
| of software for molecular modeling with millions of lines of code
| that were easier to understand that matplotlib.
|
| It's very powerful, I give them that, if you can think of a
| figure, it can do it. But you will probably spend an evening
| trying to make the labels not touch each other.
| college_physics wrote:
| complexity you can wrap, seaborn style, trading some
| flexibility for an easier API.
|
| the real "competition" is, I believe, d3.js and visualization
| grammars built on top of SVG and d3 (vega, vega-lite) that
| allow amazing interactivity for non-technical users.
|
| you can integrate matplotlib nicely with, e.g., django to
| deliver server-rendered visuals, but its all static. this
| relegates matplotlib to exploratory modes (within an IDE or
| notebook) and production pipelines.
|
| this all might change with pyscript and a browser backend,
| remains to be seen.
| bjourne wrote:
| Thanks for the link to Vega. That library/api is very
| impressive.
| nxpnsv wrote:
| Plotly is real competition and does html interactive stuff. I
| found it quite easy to use. I still prefer matplotlib though.
| college_physics wrote:
| plotly offers multiple options (python, R, javascript). the
| weby stuff is done with plotly.js and uses d3.js underneath
| - https://github.com/plotly/plotly.js
| valarauko wrote:
| I hear you. I've been using matplotlib for about as long, and
| as a python first person still find the API baffling. I avoid
| it as far as I can, Seaborn where possible. I've been trying
| out Altair but unfortunately the figure types are relatively
| restricted, though the figure logic is a relative joy to use.
|
| These days, rather than struggling with the mess that is Python
| plotting, I drop into rpy2 and make the figure in R (so much
| easier and unusual figure types are covered).
| dima55 wrote:
| Look at gnuplotlib if you want another option. It's nicer in
| a whole lot of ways.
| kevin_thibedeau wrote:
| It's baffling because it combines a Matlab style API with a
| Pythonic one using the same functions. If you know which is
| which it makes more sense.
| valarauko wrote:
| I know that the matplotlib API combines two distinct
| styles, but it is little comfort when I'm struggling to
| wrangle a plot. To this day, I have to look up the API to
| do anything even slightly non-standard. Contrast with
| ggplot in R where it's a lot more straightforward. I've
| tried 'language of graphics' implementations in Python like
| Plotnine but they're just subtlety different enough from
| the ggplot implementation in ways that are annoying.
| _Wintermute wrote:
| ggplot2 is great until you want to do something slightly
| off-piste, then it's absolute madness, it has it's own
| OOP system because R didn't have enough of them already.
| valarauko wrote:
| I think one of the major advantages of ggplot2 is the
| ecosystem - often somebody has already implemented the
| figure type I'm looking for as a ggplot2 extension. This
| is not to say that ggplot2 or R are capable of plots that
| can't be achieved in python or matplotlib. Unfortunately
| for the type of plots I'm usually trying to make, it's
| more clearly laid out in R rather than python. Python
| tends to offer me far more friction. For example, I'm
| unaware of any python package that simplifies creating
| annotated heatmaps - like pheatmap or complexheatmap can
| produce. I'm sure matplotlib can make them with enough
| skill, but it's not my forte. I find it easier to drop
| down into R and just call pheatmap.
| rkp8000 wrote:
| Just in case anyone hasn't tried it before, the "tight_layout"
| keyword in matplotlib is a game changer. Instantiating a figure
| via e.g. "fig, axs = plt.subplots(1, 2, figsize=(6, 3),
| tight_layout=True)" automatically arranges the labels and
| subplot boundaries etc to not bump into each other. It doesn't
| work 100% of the time, but it usually does a pretty good job
| and has honestly saved me a ton of plotting headaches.
| cs702 wrote:
| In my experience, `tight_layout` tends to work best _after_
| all objects have been drawn: fig, axs =
| plt.subplots(ncols=2, figsize=(6, 3)) fig.suptitle('Two
| Made-Up Plots') axs[0].plot(np.sinc(np.linspace(-5,
| 5))) axs[1].imshow(np.random.normal(size=(10, 10)))
| fig.tight_layout() # works really well here!
|
| More here: https://matplotlib.org/stable/tutorials/intermedia
| te/tight_l...
|
| You can also use `constrained_layout`, but in my experience
| it often doesn't work as well (e.g., the plots end up looking
| too cluttered for my taste), and also, `constrained_layout`
| can be noticeably slower (e.g., if you're drawing a large
| number of complex plots): https://matplotlib.org/stable/tutor
| ials/intermediate/constra...
| c-fe wrote:
| If tight_layout doesnt do the job, adding a 'bbox_inches =
| tight' may do it. I dont know why though.
| actinium226 wrote:
| What do you use instead?
| bee_rider wrote:
| One slightly redeeming feature about Matplotlib, in comparison
| to using matlab/octave plots or a spreadsheet, is that it is
| such a pain in the ass to use that I end up writing a full
| script rather than trying to manually tweak. So at least it is
| easy to reproduce my figures.
|
| This probably looks like grumbling or something, but it is
| sincerely a great help.
| d0mine wrote:
| Github Copilot manages to generate the boilerplate for
| matplotlib. The result can be evaluated easily just by looking
| at the plot. The code is mediocre at best but it allows to
| produce the desired plots quickly.
| charlieyu1 wrote:
| Arcane syntax from matlab. And too many ways to do the same
| thing. Pretty much violates the zen of python.
| antegamisou wrote:
| My experience has been the same. I always end up resorting to
| TiKZ/PGFPlots, which unironically has a steeper learning curve
| but rarely negatively surprises you once you get the hang of
| it.
| sireat wrote:
| 10 years ago I loathed doing plots in Matplotlib.
|
| When Plotly offline version matured (circa v 4) I moved over.
|
| Lately, I've found that matplotlib is just fine for quick
| exploration when combined with Copilot prompts.
|
| Instead of spending 20 minutes staring at matplotlib
| documentation, I can be done in 2 minutes with a prompt or two.
|
| # my prompt can be something like get me horizontal bar chart
| of columns "foo" and "bar" from current dataframe. Rotate x
| axis ticks 45 degrees. Add y grid every 10 values. Use log
| scale for y. Add arrows with values for maximum values. Use
| emojis for markers.
|
| # result might require tiny bit of adjustment but will
| basically be there. # Full disclosure: I haven't tried the
| emoji prompt...
___________________________________________________________________
(page generated 2023-02-15 23:02 UTC)