OK JJ,

After reading your explanation, I have tried my current Qt4Agg and PS
backends. As you told coloring worked only with PS backend. See my sample
test-snippets.

plt.rcParams["text.latex.preamble"] = r"\usepackage{color}"

plt.plot(range(10)); plt.ylabel("\color{red} {red}, \color{blue} {blue}");
plt.savefig("hello.png")

See the saved png and ps files at

http://ccnworks.googlecode.com/svn/trunk/hello.png
http://ccnworks.googlecode.com/svn/trunk/hello.ps

Another thing I noted in these images, Qt4Agg produced one looks much
prettier to my eyes than the PS. What could be causing the jiggly rendering
in the PS?

Any ideas?


On Mon, Jan 11, 2010 at 1:10 PM, Jae-Joon Lee <lee.j.j...@gmail.com> wrote:

> First of all, to use "\color" with TeX, you need to use "color"
> package, i.e., you need to modify your latex preamble to include that
> package. This can be done by
>
> import matplotlib.pyplot as plt
> plt.rcParams["text.latex.preamble"] = r"\usepackage{color}"
>
> I guess the error you encounter is because of this (I'm not sure as
> the error message is slightly different in my machine).
>
> However, this WON'T work in general!
> The color information in the dvi (or png) file is ignored in most
> cases (the only exception I know is the ps backend which does not read
> in dvi of png output).
> So, if you only want ps output, you can use usetex with "\color" command.
>
> In matplotlib, a single Text object only have a single color
> associated. So changing the color of the text within the string is be
> hardly possible (except in the ps backend). So, I guess your best
> option is to call "text" (or "annotate") multiple times with different
> colors with fine-tuned text positions.
>
> FYI, It is possible to have two (or more) text instances of different
> colors packed together (somewhat similar to this example
>
> http://matplotlib.sourceforge.net/plot_directive/users/plotting/examples/anchored_box04.hires.png
> ),
>
> Regards,
>
> -JJ
>
> On Mon, Jan 11, 2010 at 11:13 AM, Gökhan Sever <gokhanse...@gmail.com>
> wrote:
> > This seems like the solution. However when I try:
> >
> > I[1]: plt.plot(range(10))
> > I[2]: plt.ylabel(r"{\color{red} a red text}")
> >
> > It doesn't function and produce an ugly set of error messages:
> >
> > I[3]: ERROR: An unexpected error occurred while tokenizing input
> > The following traceback may be corrupted or invalid
> > The error message is: ('EOF in multi-line statement', (573, 0))
> >
> > ERROR: An unexpected error occurred while tokenizing input
> > The following traceback may be corrupted or invalid
> > The error message is: ('EOF in multi-line statement', (573, 0))
> >
> > ERROR: An unexpected error occurred while tokenizing input
> > The following traceback may be corrupted or invalid
> > The error message is: ('EOF in multi-line statement', (573, 0))
> >
> > ERROR: An unexpected error occurred while tokenizing input
> > The following traceback may be corrupted or invalid
> > The error message is: ('EOF in multi-line statement', (573, 0))
> >
> > ERROR: An unexpected error occurred while tokenizing input
> > The following traceback may be corrupted or invalid
> > The error message is: ('EOF in multi-line statement', (566, 0))
> >
> >
> ---------------------------------------------------------------------------
> > RuntimeError                              Traceback (most recent call
> last)
> >
> >
> /home/gsever/Desktop/python-repo/matplotlib/lib/matplotlib/backends/backend_qt4.pyc
> > in resizeEvent(self, event)
> >     167         hinch = h/dpival
> >     168         self.figure.set_size_inches( winch, hinch )
> > --> 169         self.draw()
> >     170         self.update()
> >     171         QtGui.QWidget.resizeEvent(self, event)
> >
> >
> /home/gsever/Desktop/python-repo/matplotlib/lib/matplotlib/backends/backend_qt4agg.pyc
> > in draw(self)
> >     128         if DEBUG: print "FigureCanvasQtAgg.draw", self
> >     129         self.replot = True
> > --> 130         FigureCanvasAgg.draw(self)
> >     131         self.update()
> >     132
> >
> >
> /home/gsever/Desktop/python-repo/matplotlib/lib/matplotlib/backends/backend_agg.pyc
> > in draw(self)
> >     386
> >     387         self.renderer = self.get_renderer()
> > --> 388         self.figure.draw(self.renderer)
> >     389
> >     390     def get_renderer(self):
> >
> > /home/gsever/Desktop/python-repo/matplotlib/lib/matplotlib/artist.pyc in
> > draw_wrapper(artist, renderer, *kl)
> >      53     def draw_wrapper(artist, renderer, *kl):
> >      54         before(artist, renderer)
> > ---> 55         draw(artist, renderer, *kl)
> >      56         after(artist, renderer)
> >      57
> >
> > /home/gsever/Desktop/python-repo/matplotlib/lib/matplotlib/figure.pyc in
> > draw(self, renderer)
> >     800         dsu.sort(key=itemgetter(0))
> >     801         for zorder, func, args in dsu:
> > --> 802             func(*args)
> >     803
> >     804         renderer.close_group('figure')
> >
> > /home/gsever/Desktop/python-repo/matplotlib/lib/matplotlib/artist.pyc in
> > draw_wrapper(artist, renderer, *kl)
> >      53     def draw_wrapper(artist, renderer, *kl):
> >      54         before(artist, renderer)
> > ---> 55         draw(artist, renderer, *kl)
> >      56         after(artist, renderer)
> >      57
> >
> > /home/gsever/Desktop/python-repo/matplotlib/lib/matplotlib/axes.pyc in
> > draw(self, renderer, inframe)
> >    1755
> >    1756         for zorder, a in dsu:
> > -> 1757             a.draw(renderer)
> >    1758
> >    1759         renderer.close_group('axes')
> >
> > /home/gsever/Desktop/python-repo/matplotlib/lib/matplotlib/artist.pyc in
> > draw_wrapper(artist, renderer, *kl)
> >      53     def draw_wrapper(artist, renderer, *kl):
> >      54         before(artist, renderer)
> > ---> 55         draw(artist, renderer, *kl)
> >      56         after(artist, renderer)
> >      57
> >
> > /home/gsever/Desktop/python-repo/matplotlib/lib/matplotlib/axis.pyc in
> > draw(self, renderer, *args, **kwargs)
> >     819         self._update_label_position(ticklabelBoxes,
> ticklabelBoxes2)
> >     820
> > --> 821         self.label.draw(renderer)
> >     822
> >     823         self._update_offset_text_position(ticklabelBoxes,
> > ticklabelBoxes2)
> >
> > /home/gsever/Desktop/python-repo/matplotlib/lib/matplotlib/artist.pyc in
> > draw_wrapper(artist, renderer, *kl)
> >      53     def draw_wrapper(artist, renderer, *kl):
> >      54         before(artist, renderer)
> > ---> 55         draw(artist, renderer, *kl)
> >      56         after(artist, renderer)
> >      57
> >
> > /home/gsever/Desktop/python-repo/matplotlib/lib/matplotlib/text.pyc in
> > draw(self, renderer)
> >     547         renderer.open_group('text', self.get_gid())
> >     548
> > --> 549         bbox, info = self._get_layout(renderer)
> >     550         trans = self.get_transform()
> >     551
> >
> > /home/gsever/Desktop/python-repo/matplotlib/lib/matplotlib/text.pyc in
> > _get_layout(self, renderer)
> >     303             w, h, d = get_text_width_height_descent(clean_line,
> >     304
> > self._fontproperties,
> > --> 305
> ismath=ismath)
> >     306             if baseline is None:
> >     307                 baseline = h - d
> >
> >
> /home/gsever/Desktop/python-repo/matplotlib/lib/matplotlib/backends/backend_agg.pyc
> > in get_text_width_height_descent(self, s, prop, ismath)
> >     169             fontsize = prop.get_size_in_points()
> >     170             w, h, d = texmanager.get_text_width_height_descent(s,
> > fontsize,
> > --> 171
> > renderer=self)
> >     172             return w, h, d
> >     173
> >
> > /home/gsever/Desktop/python-repo/matplotlib/lib/matplotlib/texmanager.pyc
> in
> > get_text_width_height_descent(self, tex, fontsize, renderer)
> >     599         else:
> >     600             # use dviread. It sometimes returns a wrong descent.
> >
> > --> 601             dvifile = self.make_dvi(tex, fontsize)
> >     602             dvi = dviread.Dvi(dvifile, 72*dpi_fraction)
> >     603             page = iter(dvi).next()
> >
> > /home/gsever/Desktop/python-repo/matplotlib/lib/matplotlib/texmanager.pyc
> in
> > make_dvi(self, tex, fontsize)
> >     369             if exit_status or not exists:
> >     370                 raise RuntimeError(('LaTeX was not able to
> process
> > the following \
> > --> 371 string:\n%s\nHere is the full report generated by LaTeX: \n\n'%
> > repr(tex)) + report)
> >     372             else: mpl.verbose.report(report, 'debug')
> >     373             for fname in glob.glob(basefile+'*'):
> >
> > RuntimeError: LaTeX was not able to process the following string:
> > '{\\color{red} a red text}'
> > Here is the full report generated by LaTeX:
> >
> > This is pdfTeXk, Version 3.141592-1.40.3 (Web2C 7.5.6)
> >  %&-line parsing enabled.
> > entering extended mode
> > (./f5e3ddba2ab4bf5147d4e32e96deb043.tex
> > LaTeX2e <2005/12/01>
> > Babel <v3.8h> and hyphenation patterns for english, usenglishmax,
> dumylang,
> > noh
> > yphenation, arabic, basque, bulgarian, coptic, welsh, czech, slovak,
> german,
> > ng
> > erman, danish, esperanto, spanish, catalan, galician, estonian, farsi,
> > finnish,
> >  french, greek, monogreek, ancientgreek, croatian, hungarian,
> interlingua,
> > ibyc
> > us, indonesian, icelandic, italian, latin, mongolian, dutch, norsk,
> polish,
> > por
> > tuguese, pinyin, romanian, russian, slovenian, uppersorbian, serbian,
> > swedish,
> > turkish, ukenglish, ukrainian, loaded.
> > (/usr/share/texmf/tex/latex/base/article.cls
> > Document Class: article 2005/09/16 v1.4f Standard LaTeX document class
> > (/usr/share/texmf/tex/latex/base/size10.clo))
> > (/usr/share/texmf/tex/latex/type1cm/type1cm.sty)
> > (/usr/share/texmf/tex/latex/psnfss/helvet.sty
> > (/usr/share/texmf/tex/latex/graphics/keyval.sty))
> > (/usr/share/texmf/tex/latex/psnfss/courier.sty)
> > (/usr/share/texmf/tex/latex/base/textcomp.sty
> > (/usr/share/texmf/tex/latex/base/ts1enc.def))
> > (/usr/share/texmf/tex/latex/geometry/geometry.sty
> >
> > Package geometry Warning: Over-specification in `h'-direction.
> >     `width' (5058.9pt) is ignored.
> >
> >
> > Package geometry Warning: Over-specification in `v'-direction.
> >     `height' (5058.9pt) is ignored.
> >
> > )
> > No file f5e3ddba2ab4bf5147d4e32e96deb043.aux.
> > (/usr/share/texmf/tex/latex/base/ts1cmr.fd)
> > (/usr/share/texmf/tex/latex/psnfss/ot1pnc.fd)
> > (/usr/share/texmf/tex/latex/psnfss/ot1phv.fd)
> > ! Undefined control sequence.
> > l.12 ...ze{12.000000}{15.000000}{\sffamily {\color
> >                                                   {red} a red text}}
> > [1] (./f5e3ddba2ab4bf5147d4e32e96deb043.aux) )
> > (see the transcript file for additional information)
> > Output written on f5e3ddba2ab4bf5147d4e32e96deb043.dvi (1 page, 224
> bytes).
> > Transcript written on f5e3ddba2ab4bf5147d4e32e96deb043.log.
> >
> >
> > Interestingly tex_demo.py works fine and renders the text properly onto
> the
> > figure.
> >
> >
> > On Mon, Jan 11, 2010 at 4:36 AM, Damon McDougall <
> d.mcdoug...@warwick.ac.uk>
> > wrote:
> >>
> >> Hi Gökhan,
> >> Do you have usetex=True set? If so, have you tried the LaTeX command
> >> sequence \color{red}{Red text goes here} ?
> >> Regards,
> >> -- Damon
> >>
> >> --------------------------
> >> Damon McDougall
> >> Mathematics Institute
> >> University of Warwick
> >> Coventry
> >> CV4 7AL
> >> d.mcdoug...@warwick.ac.uk
> >> On 11 Jan 2010, at 05:48, Gökhan Sever wrote:
> >>
> >> Hello,
> >>
> >> Is there a way to color words differently in a label or title, for
> >> example:
> >>
> >> ylabel("measurement 1 (in red color)" , "measurement 2 (in blue color)")
> >> to match with the plotted line colors?
> >>
> >> Thanks.
> >>
> >> --
> >> Gökhan
> >>
> >>
> ------------------------------------------------------------------------------
> >> This SF.Net email is sponsored by the Verizon Developer Community
> >> Take advantage of Verizon's best-in-class app development support
> >> A streamlined, 14 day to market process makes app distribution fast and
> >> easy
> >> Join now and get one step closer to millions of Verizon customers
> >> http://p.sf.net/sfu/verizon-dev2dev
> >> _______________________________________________
> >> Matplotlib-users mailing list
> >> Matplotlib-users@lists.sourceforge.net
> >> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
> >>
> >
> >
> >
> > --
> > Gökhan
> >
> >
> ------------------------------------------------------------------------------
> > This SF.Net email is sponsored by the Verizon Developer Community
> > Take advantage of Verizon's best-in-class app development support
> > A streamlined, 14 day to market process makes app distribution fast and
> easy
> > Join now and get one step closer to millions of Verizon customers
> > http://p.sf.net/sfu/verizon-dev2dev
> > _______________________________________________
> > Matplotlib-users mailing list
> > Matplotlib-users@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/matplotlib-users
> >
> >
>



-- 
Gökhan
------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to