Pretty plots: Automatically create TikZ source code for plots in LaTeX with Matlab

sin(x) -- blue, cos(x) -- orange, dashed

Example TikZ plot from Matlab code

LaTeX …
I have just finished the first chapter draft for my thesis. As you’d expect from a mathematician, I write my thesis in LaTeX (or $latex LaTeX$). In the evenings, when I couldn’t concentrate enough for creating text that would make sense to anyone, I instead played around with the plots I wanted to include.

… and Matlab don’t work too well together
I used to create all my plots in Matlab (MathWorks), save them as eps (for latex) and png (for pdflatex) and include those in the LaTeX file via includegraphics. This causes a few annoyances. The size of the included pictures is decided in LaTeX, but rescaling has an effect on everything, including the text in the labels and legend. This meant that for every type of plot (and every decision to use a different scaling) I need to fiddle with the font size in the Matlab figures, until it fits and create all those files again. In addition, although Matlab understands some LaTeX, there were some symbols it has problems with. Finally, the font in the labels is never the same as in the text.

Enter TikZ
I recently heard about this on TeX StackExchange. It’s a way to code your pictures like you code everything else in LaTeX. Unlike pstricks, which I had used in the past and can hardly remember, it works natively with pdflatex. In this way, you hand over the responsibility for any text in your plot to LaTeX. Great! To get started with TikZ, there are an extensive manual, a minimal introduction, loads of answered questions on TeX StackExchange and more.

To plot a function in TikZ, you interpolate it linearly through many points. That’s a lot of source code per function. There will be loads of plots in my thesis, each showing several functions. Oh, and want axes, too. Naturally, this calls for automation. I wrote two functions in Matlab that would automatically create the tikz code for the axes and a function plot. The plot at the beginning of this post was created with the following code (and cut to size).

Matlab code
x=(0:0.1:7); sinx=sin(x); cosx=cos(x);
tikzaxes(fid,[0 1 7],[-1 0.5 1],'$x$','$y$','2em');
tikzfunctionplot(fid,x,sinx,'blue,ultra thick','sin(x)');
tikzfunctionplot(fid,x,cosx,'orange,dashed,ultra thick','cos(x)');

LaTeX source
begin{tikzpicture}[yscale=1.5] input{tikzcodefrommatlab}

Related Links

How do you make sure that your plots and figures fit with the rest of your document? And does anyone have a good idea what to do with 3D plots?

Let me know in the comments below.

Update: I’ve added further links to packages that were pointed out to me: matlab2tikz and PGFplots. I haven’t properly tried them out yet, but especially pgfplots seems awesome.

Buch (Substantiv): …

Eine deutsche Übersetzung meines letzten Blog-Posts gibt es auf
Buch (Substantiv): Kleines Monster Lebewesen, das sich von menschlicher Zeit ernährt

Book (noun): Little monster animal that feeds on human time

The printed book, commonly referred to as “book”, is a little winged animal that feeds on human time. Their typical height is roughly around 20cm with a wingspan of about 30cm. However, individuals below 1cm or above 1.5m in height have been spotted.

Books usually live and hunt together in groups of varying sizes and are happy to move to a different group several times in their lives. Usually, they sleep cuddled together on their shelves, but after a successful hunt, a book may be happy to fall asleep just anywhere.

When hunting, the book chooses a vulnerable, unsuspecting victim and paralyses it with its venomous bite, often for hours at a time. It will then drag its victim to a quiet place to feed in peace. A book will often repeatedly feed on the same victim before moving on to the next one.
It is believed that sleeping hours are a special delicacy for books, for which they’ll risk almost anything.

Young books live in big schools, called book shops, but also older books have a tendency to herd together in large groups, called libraries, to increase their hunting success.

Subspecies and related species

Next to the printed book exists the e-book, a rather new subspecies of the book. The e-book lives in huge colonies, called an e-book reader, which can house several thousand individuals, and often the whole colony feeds on just one or two victims.

Another related species is the so called blog post. Blog posts live in family groups, known as blogs, spread far across the internet. These animals are a lot smaller than books, so each individual needs a lot less human time to survive, however there is evidence that the different blogs communicate and inform each other of potential victims in the vicinity. This makes the blog post very dangerous to humans, because a victim can lose a lot of time when attacked by several blogs at the same time.

While the numbers of the printed book are in decline and it may soon become an endangered species, both the e-book and the blog post strive and increase their numbers continually.

Books as pets
Books can be domesticated, however, many book owners are unaware of their vicious and parasitic nature. Breeding books is a very complicated and laborious endeavour and many people fail doing it. Blog posts, on the other hand, are happy to reproduce even in captivity.

Scientific classification
Family: Reading material
Species: Book
Subspecies: Printed Book, Ebook

Which books feed on you these days?

Goodbye, Post A Week

So, I guess, I failed the Post A Week challenge, massively. My last post was in early March, almost 10 weeks ago. Well, never mind. Like I said in the beginning, I do this mainly for fun. Recently, I just preferred other things to writing blog posts. That doesn’t mean that I have to stop completely, but I allow myself not to have a target schedule anymore.

Thank you,, for the idea and the challenge! Maybe, I’ll try again next time. To anyone who is still on the Post A Day/Week challenge, keep up the good work and enjoy!

How to get a list of your blog posts on your website

I have recently updated my website. One of the things I wanted to include was a list of my most recent blog posts. Well, not the whole posts, but the titles of and links to them. I searched a bit and found It does exactly what I had hoped for and is also damn easy to use. Paste/type the RSS feed address into one text field, choose a few options and click on create JavaScript. Then you can copy that code snippet and paste it into the html file of your website. Or a local file if you want to create your very own RSS feed reader. (I’m getting ideas there …) To also include my twitter updates, I used the twitter widget.

You can admire the result here not anymore, unfortunately.