4 ms·
Are there non-declarative chart visualization libraries? I’ve always used matplotlib.pyplot [1] and while it doesn’t market itself as "declarative", I don’t see
by hk__2 3y ago
Are there non-declarative chart visualization libraries? I’ve always used matplotlib.pyplot [1] and while it doesn’t market itself as "declarative", I don’t see much difference:
# Vega-Altair
alt.Chart(source).mark_line().encode(
x='x',
y='f(x)'
)
# Pyplot
plt.plot(source)
plt.xlabel('x')
plt.ylabel('f(x)')
[1]: https://matplotlib.org/stable/tutorials/pyplot.html https://matplotlib.org/stable/tutorials/pyplot.html
- lcvriend 3y agoIf we only look at the simplest example then I would agree that there is not much difference. But more complicated plots will require you to write code in a more verbose and imperative fashion when using matplotlib. Take a faceted plot like this scatter matrix [1] and try to plot it in matplotlib. You would need to set up the grid using subplots, then define the combinations you want and finally write logic to fill each subplot. The vega/altair code is much more declarative. You just tell it what needs to be in the rows/columns and vega/altair takes care of the rest. [1]: https://altair-viz.github.io/gallery/scatter_matrix.html https://altair-viz.github.io/gallery/scatter_matrix.html
- theodpHN 3y agoMirror, mirror on the wall, what’s the most declarative dataviz programming language of all? :-) *** SAS SCATTER MATRIX EXAMPLE *** proc sgscatter data=sashelp.cars; matrix Horsepower Acceleration Miles_per_Gallon / group=Origin; *** ALTAIR SCATTER MARIX EXAMPLE *** import altair as alt from vega_datasets import data source = data.cars() alt.Chart(source).mark_circle().encode( alt.X(alt.repeat("column"), type='quantitative'), alt.Y(alt.repeat("row"), type='quantitative'), color='Origin:N' ).properties( width=150, height=150 ).repeat( row=['Horsepower', 'Acceleration', 'Miles_per_Gallon'], column=['Miles_per_Gallon', 'Acceleration', 'Horsepower'] ).interactive()
- lcvriend 3y agoWell, there also is for example `pandas.plotting.scatter_matrix()` [1] which is built on top of matplotlib. I suppose the question is how does SAS or any other alternative compare to vega/altair when the desired output is less standard. [1]: http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.plotting.scatter_matrix.html#pandas.plotting.scatter_matrix http://pandas.pydata.org/pandas-docs/stable/reference/api/pa...
- joelostblom 3y agoIf you are interested in similar shortcuts for repeated charts in Altair, I'm experimenting a bit with such a syntax in the package altair-ally https://joelostblom.github.io/altair_ally/examples.html https://joelostblom.github.io/altair_ally/examples.html. Feel free to try it out and leave feedback! (disclaimer: I'm a co-maintainer of Altair)
- epgui 3y agoI don’t know what you think declarative means, but the example you’re showing is as non-declarative as it could be for such a simple thing.
- hk__2 3y ago> I don’t know what you think declarative means, but the example you’re showing is as non-declarative as it could be for such a simple thing. According to Wikipedia this is a style of programming where you describe _what_ you want rather than _how_ it should be done. What I see in my example is declarative per this definition: "I want a chart with <source>, with this X label and that Y label".
- epgui 3y agoYes but this is a contrived example so it’s not going to be the best illustration of the difference. You’re literally executing methods on an object as a way to instruct the computer to perform specific steps. The fact that you can read it as if it were a description of the outcome is a happy accident (a purely aesthetic one at that) that would not necessarily happen with another example.