PyEnergyDiagrams
I use my own script. I have posted it on GitHub now.
This is the final result:

It is quite easy to use, on the GitHub readme there is a small tutorial. You have to create an instance of ED class and then add the energy levels to it.
from energydiagram import ED
diagram = ED()
diagram.add_level(0,'Separated Reactants')
diagram.add_level(-5.4,'mlC1')
diagram.add_level(-15.6,'mlC2','last',)
diagram.add_level(28.5,'mTS1',color='g')
diagram.add_level(-9.7,'mCARB1')
diagram.add_level(-19.8,'mCARB2','last')
diagram.add_level(20,'mCARBX','last')
To add the links between the levels you can have a look to the IDs of the level using this the argument of the function plot show_IDs=True
:
diagram.plot(show_IDs=True)

And then you can use:
diagram.add_link(left_ID_levetobelinked,right_ID_levetobelinked)
Export to pgf,pdf and svg
You can export it just saving the plot from the GUI button or programmatically in different formats for publications using matplotlib backend.
I prefer to export the plot in .pgf
and then I import it in the LaTeX document this allow a full control over fonts and appearance of the figure.

For reaching better quality you have to change a little bit the autogenerated .pgf file.
The first thing you have to do is to find and replace − with -.
Later you can follow the procedure in this answer so that the font of the figure matches with the font size and type of the document.