8 ms·
Using Altair for most of my visualization in Python
- cuchoi 7y agoWhat visualization library are you using in Python?
- brylie 7y agoMainly Seaborn and Plotly. Holoviews and Altair are certainly noteworthy: http://holoviews.org/ http://holoviews.org/
- bdurbin 7y agoBokeh is my choice. http://bokeh.pydata.org/en/latest/docs/user_guide.html http://bokeh.pydata.org/en/latest/docs/user_guide.html
- F_J_H 7y agoPlotly works well for me - interactive plots are great, and can produce HTML to embed elsewhere.
- sheerun 7y agoSeaborn
- analog31 7y agoMatplotlib, due to mental inertia. But nothing I do rises to the level of "visualization," just plotting. ;-) And my plots are rarely seen by anybody but me.
- xioxox 7y agoVeusz, because I wrote it!
- eoinmurray92 7y agoPlotly with Cufflinks is pretty great to integrate with pandas (wide range of quick examples here: https://kyso.io/KyleOS/cufflinks-intro https://kyso.io/KyleOS/cufflinks-intro)
- nmca 7y agoAltair is incredible until you realise your plots are bigger than your data. It's annoying, but overall still very good.
- mxwsn 7y agoCan you speak more about this? Are you saying that Altair's speed scales poorly with dataset size?
- nmca 7y agoIt throws an error if you try to plot more than 5000 datapoints by default, internally altair produces a JSON representation (vega-lite) that is larger than the data you plot (because it contains the data you plot, plus formatting information). If you save this output, for example in an ipython notebook, it gets phat pretty quickly. Altair is still great though, but this issue makes it occasionally annoying.
- cuchoi 7y agoJust in case, you can plot datasets larger than 5000. A quick fix is using "alt.data_transformers.enable('json')"
- domoritz 7y agoThis is something we are painfully aware of and have started to work on. For a start, see Jake's work on https://pypi.org/project/altair-data-server/ https://pypi.org/project/altair-data-server/.
- airstrike 7y agoPretty cool. > Sadly, in Python, we do not have a ggplot2. I've got to ask, though: why is that the case?
- X6S1x6Okd1st 7y agomatplotlib & things built upon it e.g. seaborn are the dominate forces in python visualizaiton.
- jhbadger 7y agoI'm not sure it is. I'm more of an R guy, but when I do use python I use plotnine[1], which is very ggplot2-like. [1] https://plotnine.readthedocs.io/en/stable/ https://plotnine.readthedocs.io/en/stable/
- objektif 7y agoIsnt there a ggplot2 like library out there. I remember coming accross one at some point.
- cwyers 7y agoThere are several libraries inspired by the grammar of graphics and ggplot, and there has even been something like a port (although its now abandoned): https://github.com/yhat/ggpy https://github.com/yhat/ggpy What I think the author means is that there is no ggplot in the sense that there's no One Ring To Rule Them All -- ggplot2 basically killed off lattice and base R graphics for about 90% of users. The Python graphics ecosystem is more Balkanized.
- SatvikBeri 7y agoNo fundamental reason. ggplot2 was released 4 years after matplotlib, and the Python ecosystem was already centered around the latter by the time it became obvious that the grammar of graphics approach was superior. Python's surging popularity in the data analysis space is also pretty recent. But any approach to a ggplot2 equivalent either has to abandon the massive ecosystem around matplotlib, or build on top of it – and matplotlib's heavily state-based approach makes that difficult. Plotnine is attempting to do that, I hear it's pretty good.
- ggoddard 7y agoThis talk from PyCon 2019 is related and may be of interest: https://www.youtube.com/watch?v=vTingdk_pVM https://www.youtube.com/watch?v=vTingdk_pVM
- jxramos 7y agoHis earlier talk is great too to get the lay of the land... Jake VanderPlas The Python Visualization Landscape PyCon 2017 https://www.youtube.com/watch?v=FytuB8nFHPQ https://www.youtube.com/watch?v=FytuB8nFHPQ
- errantspark 7y agoI came in here expecting to see one hell of a rationalization for using a 44 year old computer to do visualizations. :)
- x0054 7y agoHaha, me too. Still interesting, just not nearly as interesting as expected.
- joopdevries 7y agoHaha I came here expecting to see the dude from Assassin's Creed drawing all kinds of graphs :'-) Or better, imagining.
- xkcd-sucks 7y agoA literal assassin killing me would be better than working with anything based on matplotlib; fortunately altair does away with it.
- rocqua 7y agoOne question: Does it work in jupyter notebooks/labs?
- cuchoi 7y agoYes! Forgot to mention that... https://altair-viz.github.io/getting_started/installation.html https://altair-viz.github.io/getting_started/installation.ht...
- tomrod 7y agoI'm looking for an interactive visualization tool that I could have site visitors access via a github blog page. Does Altair manage client-side processing? I'm still pretty new in the search but like Altair's adoption of Vega-lite.
- F_J_H 7y agoPlotly plots saved as html?
- domoritz 7y agoYes, you can save an Altair chart as an HTML page. See https://altair-viz.github.io/user_guide/saving_charts.html#html-format https://altair-viz.github.io/user_guide/saving_charts.html#h.... You can also just get the Vega-Lite JSON form Altair and embed it in a web page with Vega-Embed.
- tomrod 7y agoI'll dig in -- thanks! Looking for the interactivity -- surely that's not supportable in native HTML, right? Has to use JS or CSS? (I'm not a web-dev of any sort, only very superficial understanding, data scientist by day) EDIT: Ohhhh, this looks nice!
- amrrs 7y ago`bokeh` is another package that can fit this bill.
- eoinmurray92 7y agoHere's a guide to using Github+Kyso [1] to publish your type of article to the web, it should be a very similar workflow to github pages, and you can use any of the popular python visualization libraries - we support plotly, bokeh, vega, altair, matplotlib etc. https://towardsdatascience.com/publish-data-science-articles-to-the-web-using-jupyter-github-and-kyso-3721b8336946 https://towardsdatascience.com/publish-data-science-articles... [1] Disclaimer: I'm the CEO of Kyso
- sacheendra 7y agoI'm partial to plotnine (https://github.com/has2k1/plotnine https://github.com/has2k1/plotnine). It is an implementation of grammar of graphics in python (like ggplot2). It provides a stateless layer like interface which feels intuitive, and avoids bugs due to global state. But, it is built on top of matplotlib. So, if plotnine cannot do something, you can go back to the matplotlib way of doing things and take advantage of the large number of blogs, example, tutorials, and stackoverflow answers. Performance wise, it can handle more data than altair. But less than matplotlib, if you use the built in data manipulation features.
- domoritz 7y agoAltair builds on Vega-Lite but if you cannot do something in Vega-Lite, you can do it in Vega. Performance is a huge concern for us and we are working on some improvements in that area. We will first focus on pushing computation and aggregation down into the Python kernel.
- pj_mukh 7y agoHow is Altair on 3D data? I see no examples of this. Matplotlib is decent here (apart from all the same disadvantages the author lays out), but the default options look kinda fugly.
- herdrick 7y agoThe article says it doesn't support 3d.
- nsriv 7y agoIn the article it says Altair does not do 3D plotting, if that was your question.
- luckydata 7y agoReading the article would help with this question.
- nicolaskruchten 7y agoPlotly supports interactive 3d scatters, lines, surfaces, cones, streamtubes, volumes and isosuraces :) https://plot.ly/python/3d-charts/ https://plot.ly/python/3d-charts/
- kirarpit 7y agoAltair doesn't seem to have quiver plots though. :(
- domoritz 7y agoI think you might be able to build one based on this Vega version https://vega.github.io/vega/examples/wind-vectors/ https://vega.github.io/vega/examples/wind-vectors/
- Lowkeyloki 7y agoThat post is the only thing on the entire site.
- cuchoi 7y agoYes! Just created this blog and this is my first post.
- wtdata 7y agoThe problem with all these nice new visualization libraries for Python, is that they all (at least the shinny nice ones) fail totally short when it comes to do B&W graphics for journal publications. Things like filling patterns, line patterns etc, are mostly missing. I still use Matplotlib and I can make it look beautiful and exactly how I want... it's just a lot more work to get the shinny bits.
- dragonshed 7y agoThe underlying vega library supports overriding styles for color and line properties - it may not be as difficult as you imagine to generate B&W graph outputs for print.
- jacobolus 7y agoOnce you have a web / javascript output, there are a bunch of possibilities: https://observablehq.com/search?query=stippling https://observablehq.com/search?query=stippling https://observablehq.com/search?query=dithering https://observablehq.com/search?query=dithering https://observablehq.com/search?query=halftone https://observablehq.com/search?query=halftone https://observablehq.com/search?query=crosshatch https://observablehq.com/search?query=crosshatch (Or go out and look around github or the broader web to find many more options.)
- j88439h84 7y agoPlotnine is the best when you are making a plot to put in a pdf or on paper.
- zeec 7y agoI save the data from python or matlab and use pgfplots to create stunning plots. Nothing I saw in any other plotting lib came ever close to pgfplots in terms of beauty and flexibility.
- fock 7y agosecond that. also for the scientific community at large, big portions of "not-so-happy"-matplotlib-users are just using whatever they/their admin installed sometime ago, which probably is outdated and does not include a bunch of features introduced in v3
- Iamhisalt 7y agoI won’t be switching from Seaborn anytime soon. >Not great statistical support. I still rely on Seaborn for quick visualization that needs to fit a linear regression.
- vsskanth 7y agoAnyone figured out how to use Altair with VSCode to plot in a separate window ? If I use matplotlib, I can use the show() method to plot in a separate window. I would love to have a similar thing for Altair. I'm fine if there's a working method in Spyder as an alternative.
- mattrp 7y agoAnyone here tried/like metrics-graphics?
- Liquix 7y agoDoes anyone have a mirror?
- cuchoi 7y agoIt should be working now!
- totaldude87 7y agolol, looks like we broke the site :| Bandwidth Limit Exceeded
- cuchoi 7y agoUp again!
- dancodes 7y agoExcellent visualizations! Could you share the code used to create your last sample chart?
- cuchoi 7y agoThis example gives you the main structure: https://altair-viz.github.io/gallery/ranged_dot_plot.html https://altair-viz.github.io/gallery/ranged_dot_plot.html. Let me know if you need the specific code for that visualization, happy to share it.
- happy-go-lucky 7y agoAs part of our work, we create data dashboards. We use NumPy and Pandas to analyze data, either Flask or Django as a framework, and HighCharts for interactive charts. The JS charting library has a variety of charts to meet our needs. Our input stored either as SQL or CSV is dynamic data. I am beginning to wonder if HighCharts is replaceable with a fully open-source charting library.
- imcoconut 7y agoHave you checked out the dash library by plotly? It's pretty awesome and i use it for a similar purpose. MY dashhboards/charts are pretty basic but there seems to be good support for interactivity and callbacks. https://dash.plot.ly/gallery https://dash.plot.ly/gallery https://plot.ly/python/ https://plot.ly/python/
- eoinmurray92 7y agoI should be pretty easy to set this up with Dash by plotly, and you can host in various places. Here a guide we've written for an app where you can drag and drop a file and get a chart from it. https://kyso.io/KyleOS/creating-an-interactive-application-using-plotlys-dash https://kyso.io/KyleOS/creating-an-interactive-application-u... But you can extend to take an SQL query or maybe to set up an external api call.
- kfk 7y agoMe and my team are big tableau users, so now that we are testing Python vega and altair are the natural approach. I am having my struggles to make altair work on jupyterlab (while ipyvega works so I could start playing), but I think it’s worth the effort. The Altair guys are extremely nice and responsive on github which is great too. For those looking for side projects, I think a nice altair gui that works in jupyterlab would be great. Anyway, why this approach is superior? Because once you get it you’ll be amazed the stuff you can do and how easily, also how easy is to train new analysts on this, this is important and matplotlib falls short. But don’t take my word, grab a trial copy of Tableau and see it for yourself.
- donquichotte 7y ago> Not great statistical support. I still rely on Seaborn for quick visualization that needs to fit a linear regression. Why does a plotting library need support for statistical analysis? I always think of manipulating data and visualizing it as orthogonal disciplines.
- sleavey 7y agoIn the grand scheme of things it's a minor gripe, but I really dislike APIs that encourage chaining of calls like `alt.Chart(data).mark_circle(size=200).encode(...)` from the article. This is found in many other libraries, especially JavaScript ones like e.g. jQuery. I know it's compact, but it makes it harder to see what's going on and hides the fact that all of the operations are actually being applied to the leftmost object.
- arnsholt 7y agoSmallTalk has the correct answer here, with its method chaining operator `;`, I feel. For cases like this where you build complex state on an object via method calls, it gives some pretty nice code. And since it's a separate construct, the individual method calls can have return values that make sense too, as opposed to this style of interface where the methods all have to return the object again for chaining.
- enriquto 7y agoThese python tools are slowly approaching the quality of gnuplot. In a few years they will be almost there.
- stesch 7y agoExpected some interface to an Altair computer and blinking lights. People don't care anymore how they name their projects. :-(
- nicolaskruchten 7y agoAltair here is a play on the underlying library called Vega. They're both stars in the "Summer Triangle" https://en.wikipedia.org/wiki/Summer_Triangle https://en.wikipedia.org/wiki/Summer_Triangle
- stesch 7y agoPeople don't call their programs IBM or Apple. How about a JavaScript library to extract the second to last character of a string and call in Commodore Amiga 3000?
- sirrice 7y ago> Sadly, in Python, we do not have a ggplot2. https://github.com/sirrice/pygg https://github.com/sirrice/pygg provides the ggplot2 syntax in Python as a wrapper around Wickham's R implementation. It is useful if you 1) want the R syntax, 2) program in Python, 3) just want static plots.
- nicolaskruchten 7y agoPlotly Express (https://plotly.express/ https://plotly.express/) is a new high-level wrapper on top of Plotly.py which gives a similar API to Altair in a lot of ways. Under the hood it works the same way: Plotly.py generates JSON figure descriptions which are passed to Plotly.js for rendering. The whole thing is, of course, free and open-source and well-documented :)