
Xkcd-Style Plots in Matplotlib (2012) - TsukiZombina
https://jakevdp.github.io/blog/2012/10/07/xkcd-style-plots-in-matplotlib/
======
sharpercoder
From a usability perspective, "sketchy" or "cartoony" charts actually serve a
purpose. To me, they communicate "the trend is important here, not the precise
numbers". This can _more acurately_ convey communication intent as opposed to
a precise rendered graph.

~~~
ianbooker
I think I agree on the core idea, but if you extrapolate this into font
selection, for example, you would rather pick Comic Sans for more "strategic"
and abstract projects? ;)

~~~
ericsoderstrom
(Clearly you're joking) but this isn't an extrapolation. Lines that make up
characters in a font don't have any semantic meaning related to the words.
Lines in a graph do have semantic meaning related to the data they represent.

[edit] maybe you could make this argument for a language like Chinese. At
least for characters with semantically meaningful radicals.

~~~
coldtea
> _Lines that make up characters in a font don 't have any semantic meaning
> related to the words._

Err, actually they do. If not the line itself, the font's overall design does.
A font can look casual, another official, fun, etc.

In fact this very post uses the "Humor Sans" font for the graphs for exactly
this very reason. To make labels appear more casual.

------
altairiumblue
Jake is a great teacher - I would definitely recommend his book to people new
to Python for data science, as well as any talk by him that you can find on
youtube.

Also, it's kind of a shame that matplotlib is still so deeply ingrained in the
Python data ecosystem.

~~~
simonh
Why a shame? Is there something better it’s crowding out?

~~~
Tarq0n
Assuming all you want to do is make some graphs, almost every alternative is
better. Matplotlib is like the opengl of plotting libraries, there's almost no
abstraction, you have to create plots in an imperative way and it's extremely
verbose.

A plotting library focused on useability should let you specify what you want
in a declarative manner, then get out of your way. Ggplot2 being the prime
example.

~~~
galenlynch
Do you have any concrete examples for Python? As far as I know, ggplot2 is
only for R. I would be interested to try out some alternatives to Matplotlib.

~~~
Tarq0n
Altair (based on vega-lite) is a personal favorite. Plotnine is also a good
port of ggplot.

~~~
galenlynch
Thanks!

------
__blockcipher__
Am I the only one who kind of hates the "notebook" format?

Don't get me wrong, the general concept is great. Shareable, interactive code
snippets are awesome. But for a demo article like this I want a single python
file that I can run and immediately see the results. I don't want to have to
spin up a jupyter or pylab instance (I've never used pylab so not sure if it
works the same EDIT: pylab is analogous to matplotlib, not jupyter. lesson
learned). I just want to run the damn code.

On a bit of a tangent here but I also hate the way Jupyter makes git diffs
absolutely unusable.

Now, the above being said, the fact that sites like Github have native Jupyter
functionality is awesome. It'd be a lot less painful if they'd (the author)
have linked to a repo that we (I) could run.

\--

For example, first I copied the initial code snippet that defines the xkcdify
function. Then I ran it with python3, and realized it needed python 2 due to
the urllib2 dependency (this is not a big deal since the article is from
2012). Then I ran it again with python2, and realized I don't have numpy/scipy
etc installed for python2, so I pip installed those. Then I copied in the
following code snippet that generates the plot. I then ran it again, and it
still didn't work. Finally after a brief google search, I realized I needed to
put pylab.show() at the end since I didn't have the %pylab inline or whatever
that command is since I'm running it with "pure python".

Honestly, it really wasn't _that_ much effort, but I vastly would prefer to
have a demo like this given as a single python file, with the dependencies
clearly specified in the blog post.

~~~
EForEndeavour
You're not the only one. Here are slides from a talk that Joel Grus gave at
JupyterCon 2018 titled "I hate Jupyter Notebooks":

[https://docs.google.com/presentation/d/1n2RlMdmv1p25Xy5thJUh...](https://docs.google.com/presentation/d/1n2RlMdmv1p25Xy5thJUhkKGvjtV-
dkAIsUXP-AL4ffI)

Video of talk:
[https://www.youtube.com/watch?v=7jiPeIFXb6U](https://www.youtube.com/watch?v=7jiPeIFXb6U)

~~~
__blockcipher__
Wow, thanks so much. Great talk. I felt like I was going crazy trying to get
these stupid notebooks to work with their weird out-of-order execution
glitches

------
jen729w
I’ve always had a problem designing diagrams in Visio. (I work in IT so think
high level network diagrams, flowcharts describing state/processes, that sort
of thing.)

Last year I found the template that makes everything look hand-drawn. It
changed the way my brain saw the diagram, going from “this thing must be
absolutely pixel perfect” to “this is something I literally sketched on the
back of a napkin”.

This allowed my brain to _create_ the thing, without worrying about whether
everything was lined up just so. Then, at the end, I can choose to flip the
theme back to straight edges, and line everything up if I choose.

Actually, many times I just left it as it was. Others seemed to like the hand-
drawn look, which came as a surprise.

------
emgee_1
Interesting. Is something like this available in R?

In a same vain: when producing content using latex ( in the eighties ) I had a
problem that papers under construction looked way to good ( lie as if was
printed) ; in order to counter the good looks of the printed paper I choose to
use a typewriter like blurred ink dropped font to ensure that what was printed
was a draft and still under construction; producing graphs that show intent
but not precision is very useful.

~~~
altairiumblue
[https://cran.r-project.org/web/packages/xkcd/vignettes/xkcd-...](https://cran.r-project.org/web/packages/xkcd/vignettes/xkcd-
intro.pdf)

~~~
emgee_1
Thank you very much! I will look into this.

------
wodenokoto
Is there a bootstrap or css theme to go along, so my PoC web-app can match the
style of my proof of concept graphs?

~~~
turbinerneiter
There is [https://roughjs.com/](https://roughjs.com/) \- but the style is
different and it's for drawing SVG.

------
stared
(2012), infuential but archaic.

Now it is built-in matplotlib:
[https://matplotlib.org/api/_as_gen/matplotlib.pyplot.xkcd.ht...](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.xkcd.html)

------
vntok
yUML.me is awesome for hand-drawn DB schemas or to show a website's graph of
interlinked pages:

[https://yuml.me/diagram/scruffy/class/draw](https://yuml.me/diagram/scruffy/class/draw)

------
loser777
it would be cool if Randall stopped drawing plots by hand and just started
using this ;)

~~~
ianbooker
I would not be surprised if he does exactly that already ;)

------
panda88888
Follow up in 2013. XKCD officially merged in Matplotlib.

[http://jakevdp.github.io/blog/2013/07/10/XKCD-plots-in-
matpl...](http://jakevdp.github.io/blog/2013/07/10/XKCD-plots-in-matplotlib/)

------
masukomi
it should be noted that the code to do this is actually part of matplotlib
now. The author comments about it here
[http://jakevdp.github.io/blog/2013/07/10/XKCD-plots-in-
matpl...](http://jakevdp.github.io/blog/2013/07/10/XKCD-plots-in-matplotlib/)
and refers to the code in the post here as "my ugly little hack."

------
pfd1986
Needs 2013 tag. Still fun tho.

~~~
lrem
In the intervening years there've also been some nice posts about this. In
particular I agree with one that argued that using this style in professional
setting is indeed a good idea, to emphasize that what you're presenting are
hand-waved assumptions.

