
Dexplot: Python library for data visualization - illuminated
https://www.dexplo.org/dexplot/
======
hprotagonist
Of the "we really don't like matplotlib syntax, really do want to live in
dataframes all the time, so we wrapped mpl and pandas" plotting libraries,
plotnine has impressed me the most by far:

[https://plotnine.readthedocs.io/en/stable/](https://plotnine.readthedocs.io/en/stable/)

 _plotnine is an implementation of a grammar of graphics in Python, it is
based on ggplot2. The grammar allows users to compose plots by explicitly
mapping data to the visual objects that make up the plot._

~~~
hantusk
I'm really fond of [https://altair-viz.github.io/](https://altair-
viz.github.io/) which wraps and translates into [https://vega.github.io/vega-
lite/](https://vega.github.io/vega-lite/).

The interactivity and cross-filtering possibilities is really good when you
have many datapoints.

From vega-lite I miss that they did not develop object constancy
([https://bost.ocks.org/mike/constancy/](https://bost.ocks.org/mike/constancy/))
animation possibilities since they're building on top of d3.js.

~~~
stevesycombacct
I'm a big fan of Altair and have used it for demos in the past. However,
restrictions such as a 5,000-row limit on dataframes and usage only inside
notebooks pushes me to other solutions like Plotly.

~~~
pea
BTW, the 5000 restriction is more a "guide" for structuring your data - you
can turn it off.

Also, Altair plots can certainly be used outside of notebooks! Happy to share
some examples..

~~~
stevesycombacct
Please, I couldn't find a straightforward configuration to do that

------
TedPetrou
Hey everyone, I'm the author of Dexplot. I have written large sections of
books on seaborn, have taught it in classes for years, and had many issues
with it, some of which are outlined below:

• Not allowed to set figure size

• No wrapping of tick labels

• No strings for pandas aggregation functions

• No automatic ordering of x/y labels (dexplot provides several options)

• Having to use separate grid functions (catplot, lmplot) for multiple
subplots

• Something like 5 different functions for scatterplots. Dexplot has one

• No relative frequency bar charts, which are a fantastic way to explore data.
Dexplot provides normalization over any set of variables

• No stacked bar charts

• Seaborn docs have distribution plots (box, violin) in the "categorical"
section. A major distinction needs to be made between plots that aggregate,
those that show distributions, and those that plot raw data (like
scatterplots)

• Returning of matplotlib axes or seaborn grid objects. Dexplot always returns
the matplotlib figure

• Seaborn is essentially dead as far as I can tell with few changes in the
last 2-3 years. There are even parameters that continue to be non-functional

In the future, Dexplot will add:

• Many more plotting functions

• Several apps (built from ipywidgets) to explore data. Currently, there is
one for viewing colors

• Better automatic figure sizing (it exists now, but will be improved)

• Automatic DPI detection so that matplotlib inches correspond to actual
screen inches

Dexplot aims to be very intuitive, easy to use, consistent, and allow easy
exploration (the name is a smashing together of data exploration plotting).

Here is one example comparison between dexplot and seaborn.
[https://twitter.com/TedPetrou/status/1271436948721328129](https://twitter.com/TedPetrou/status/1271436948721328129)

Examples such as these are what drove me to create the library.

I'd love to get feedback and happy to take detailed criticism.

~~~
klmadfejno
> Seaborn is essentially dead as far as I can tell with few changes in the
> last 2-3 years. There are even parameters that continue to be non-functional

[https://seaborn.pydata.org/whatsnew.html](https://seaborn.pydata.org/whatsnew.html)

Seaborn has received a couple updates this year. Not sure what you mean by
can't control figure size either. The ways to do so are inconsistent, but
they're there.

> I'd love to get feedback and happy to take detailed criticism.

I like your syntax a lot. This page isn't a good way to show it. Seaborn's
gallery page is excellent, even if redundant at times. I would dedicate more
time to creating more easily useable docs like that. Docs are almost
everything when it comes to charting.

Also need to see stuff on how to control aesthetic things like color,
outlines, style, etc.

~~~
TedPetrou
Technically, there was a new "major" release with version 0.10, but it was
just some bug fixes and the same as 0.9.1. The last release with anything new
was in July of 2018. Given the rate of the last several releases, I don't
expect much to happen for a while, thus "essentially dead".

You cannot control axes plot figure size from seaborn directly. You have to
access the figure from the axes (which most people don't know how to do) or
create the figure first by importing matplotlib. Really annoying for those
that just want to analyze data quickly. Grid plots have the ability to adjust
figure size, but return a seaborn object and not a matplotlib figure.

Agreed, docs need to get better. Better datasets, a gallery, etc... I've only
spent a week on this, so there will be a lot of improvements in the future.

~~~
klmadfejno
Hey for what it's worth I think this is really impressive for only a week!

------
joshlk
I personally find the Python plotting landscape a mess and confusing. It
always seems to be a lot harder than is necessary to do anything and make it
look good.

~~~
captnswing
I agree! I found this presentation invaluable in getting a good overview of
the landscape and the different segments within:
[https://www.youtube.com/watch?v=FytuB8nFHPQ](https://www.youtube.com/watch?v=FytuB8nFHPQ)

It helped me settle on [https://altair-viz.github.io/](https://altair-
viz.github.io/) (coming from matplotlib) and I never looked back

~~~
pea
I find the big benefit of Altair is that the API is so nice and composable,
and because vega provides a ton out of the box to build really high quality
visualisations.

For instance, if you take this (sample) report using Altair to plot Default
Alive / Default Dead:
[https://datapane.com/leo/reports/startup_finance_report/](https://datapane.com/leo/reports/startup_finance_report/)
\- the interactive code is actually relatively small:
[https://gist.github.com/lanthias/5a41c1e4b21ae274ddb95cf5ad1...](https://gist.github.com/lanthias/5a41c1e4b21ae274ddb95cf5ad10b4ac)

It's also great being able to add Altair shapes to Folium for geoplotting (as
the vega geoplotting is a bit more low-level).

What I really think is missing in the ecosystem is a "vega for tables", so you
could be rich, interactive tables with a similar grammar. That would rock.

------
S3L
I am a bit confused why we need another additional package instead of working
with seaborn and implement the changes in there.

In my business, we have a lot of test data on a database, where everyone uses
their own python-based solutions for plotting, mostly done in a Jupyter
notebook.

Guess what, to compare results and have one dedicated style-guide for the
project, you create more complexity than needed.

-> I tried Orange3 for a while, which has a really intuitive way to use, but I miss the direct connection to a DB. Any advice warmly welcome :-)

~~~
TedPetrou
Hey there, I'm the author of Dexplot. There are many issues I had with seaborn

• Not allowed to set figure size

• No wrapping of tick labels

• No strings for pandas aggregation functions

• No automatic ordering of x/y labels (dexplot provides several options)

• Having to use separate grid functions (catplot, lmplot) for multiple
subplots

• Something like 5 different functions for scatterplots. Dexplot has one

• No relative frequency bar charts, which are a fantastic way to explore data.
Dexplot provides normalization over any set of variable

• No stacked bar charts

• Seaborn docs have distribution plots (box, violin) in the "categorical"
section. A major distinction needs to be made between plots that aggregate,
show distributions, and those that plot raw data (like scatterplots)

• Returning of matplotlib axes or seaborn grid objects. Dexplot always returns
the matplotlib figure

• Seaborn is essentially dead as far as I can tell with few changes in the
last 2-3 years. There are even parameters that continue to be non-functional

In the future, Dexplot will add:

• Many more plotting functions

• Several apps (built from ipywidgets) to explore data. Currently, there is
one for viewing colors

• Better automatic figure sizing (it exists now, but will be improved)

• Automatic DPI detection so that matplotlib inches correspond to actual
screen inches

Dexplot aims to be very intuitive, easy to use, consistent, and allow easy
exploration (the name is a smashing together of data exploration plotting).

------
bede
Great work. This is easily among the most elegant Python plotting APIs for
exploratory data analysis. Seaborn is a fantastic tool but I sympathise with
the author's frustrations with it.

Excellent documentation, but as others have said docs are everything with
charting, so expanding that and adding a gallery are probably the best ways to
get people onboard. Looking forward to giving this a try.

------
jwilber
The facet options with the simple “split” arguments look quite nice.

------
themoops36
How do people feel about Plotly?

I've been using it for years and by far it's been the easiest plotting library
(while still being really flexible).

The company is very active in developing, for example recently adding
plotly_express, which lets me get charts with one liners like: px.line(df,
x='x_column', y='y_column')

I'm not affiliated with Plotly but just curious what people think since I find
it to be an awesome library but I rarely hear about it or meet people who use
it.

~~~
klmadfejno
Last I checked I was only 99.9% sure that nothing was ever being sent to
plotly servers. I needed it to be 100%, not even possible for that to happen.

edit: but due to this post I checked again and it seems this is no longer an
issue. So +1 to plotly.

~~~
nicolaskruchten
Yes, here's the official word on this, under "Can I use Plotly for Python
offline, without being connected to the internet?"
[https://plotly.com/python/is-plotly-free/](https://plotly.com/python/is-
plotly-free/)

~~~
klmadfejno
In past versions, although free, it's default settings would try to ping their
servers. You had to manually set offline mode to False.

------
karxxm
Again a static default plot library? I would love to see some libraries with
higher level visualizations like parallel coordinates, star coordinates and so
on. I know, they require interaction, but hey ... why not spending time on
this and not again a default plot library? Bar plot stays a bar plot, doesn't
matter if you plot it with mpl or seaborn or whatever.

~~~
AlphaSite
Plotly is pretty great for that sort of thing. It has those sorts of things
built in.

~~~
hannibalhorn
And for those who missed the announcement, plotly is now an open source
library (it used to be a web service where you needed an API key and had to
upload data to their servers, etc.) You still get all the "polish" (nice docs,
consistent API, examples, etc.) that went into it when it was a commercial
product.

~~~
nicolaskruchten
Thanks for mentioning this! If people are curious, here's the official
announcement: [https://medium.com/plotly/plotly-py-4-0-is-here-offline-
only...](https://medium.com/plotly/plotly-py-4-0-is-here-offline-only-express-
first-displayable-anywhere-fc444e5659ee)

------
wodenokoto
The same creators have a few other interesting packages on the same site.

The dexplo package (a dataframe libray) also sounds really interesting. They
also have a barchart race, which looks like an excellent way to get to the
front page of Reddit's r/dataisbeautiful

~~~
TedPetrou
Thanks! The whole goal of dexplo and dexplot is to provide a much simpler and
more consistent alternative to pandas/seaborn. I find pandas especially
cumbersome to work with. I haven't had time to develop dexplo much, but am
hoping for a first major release this year.

------
heybrendan
Thank you for sharing.

I'm curious, how does this compare to Chartify [1]? Note, I am not affiliated
with Spotify or the Chartify team.

[1] [https://github.com/spotify/chartify](https://github.com/spotify/chartify)

------
stared
I don't want to be too snarky, but "beautiful data visualizations" does not go
well with typographic errors on the example pages:

\- overlap of label

\- HTML tables overlapping the right many bar

~~~
TedPetrou
Labels do not overlap and HTML tables are now fixed in the docs.

------
rrggrr
Without PDF output it's a chore to share visualizations over email, chat, etc.
The _uncharted_ aspect of data visualization is reporting and sharing IMHO.

~~~
pea
Hey, that's what we do at Datapane! [https://docs.datapane.com/tutorials/tut-
creating-a-report](https://docs.datapane.com/tutorials/tut-creating-a-report)
\- you can create a standalone HTML report which contains interactive tables
and plots.

You can also publish this to the web
([https://datapane.com/leo/reports/stock_report_5d2925b9/](https://datapane.com/leo/reports/stock_report_5d2925b9/)),
embed it into social media ([https://medium.com/@leo_26134/embedding-with-
datapane-366e60...](https://medium.com/@leo_26134/embedding-with-
datapane-366e60434b5f)), or deploy your Jupyter Notebook or Python script so
that other people can run them with parameters to generate reports
dynamically.

It's still pretty new, so if there's anything you'd like to see, give me a
shout at leo [at] datapane.com.

------
hmcamp
I love the simplicity

------
peteradio
Might want to change your grid settings so site makes better use of large
screen real estate. The plots are overflowing under the right side nav.

------
The_Amp_Walrus
It's not clear how this API works from scanning the docs, but nested in there
is a key point:

> A matplotlib figure object is returned [from each plot function]

