multi colored text

I have a blue line plot and a green line plot. I'd like to add some figtext at
the bottom, and I'd like the text colors to match the plot colors. So I'd have
some text in blue and some in green.

figtext only allows one color

I could use 2 figtext, but then I have to manually find coordinate positions for
the text. That's ugly.

It would be nice if we had a TeX-like approach, where I could create a green
text object and a blue text object, then assemble them by stacking boxes.

Any ideas?

Hi Neal,

Neal Becker, on 2013-10-30 10:14, wrote:

I have a blue line plot and a green line plot. I'd like to add some figtext at
the bottom, and I'd like the text colors to match the plot colors. So I'd have
some text in blue and some in green.

figtext only allows one color

I could use 2 figtext, but then I have to manually find coordinate positions for
the text. That's ugly.

It would be nice if we had a TeX-like approach, where I could create a green
text object and a blue text object, then assemble them by stacking boxes.

You should be able to follow the approach I've taken here in
stacking the text bounding boxes together:

https://github.com/matplotlib/matplotlib/issues/697

best,

···

--
                   _
                  / \
                A* \^ -
             ,./ _.`\\ / \
            / ,--.S \/ \
           / `"~,_ \ \
     __o ?
   _ \<,_ /:\
--(_)/-(_)----.../ | \
--------------.......J
Paul Ivanov
http://pirsquared.org

I'm not sure it's the best approach, but I've used HPacker (or VPacker if you want more than one line) to do this

from matplotlib.offsetbox import HPacker
from matplotlib.offsetbox import VPacker
from matplotlib.offsetbox import TextArea
from matplotlib.offsetbox import AnchoredOffsetbox

plot([1,2,3,4,5])
wloc = TextArea('WIND XYZ=()', textprops=dict(color="r", size=12))
sloc = TextArea('SOHO XYZ=()', textprops=dict(color="k", size=18))
txt1 = HPacker(children=[wloc, sloc], align="baseline", pad=0, sep=12)
txt2 = VPacker(children=[wloc, sloc], align="baseline", pad=0, sep=30)
bbox = AnchoredOffsetbox(loc=1.0, pad=0, borderpad=0,
             bbox_to_anchor=(0.8, 0.10),
             bbox_transform=gca().transAxes,
             child=txt1,
             frameon=False)
gca().add_artist(bbox)
bbox = AnchoredOffsetbox(loc=1.0, pad=0, borderpad=0,
             bbox_to_anchor=(0.4, 0.80),
             bbox_transform=gca().transAxes,
             child=txt2,
             frameon=False)
gca().add_artist(bbox)

···

On Oct 30, 2013, at 10:14, Neal Becker <ndbecker2@...287...> wrote:

I have a blue line plot and a green line plot. I'd like to add some figtext at
the bottom, and I'd like the text colors to match the plot colors. So I'd have
some text in blue and some in green.

figtext only allows one color

I could use 2 figtext, but then I have to manually find coordinate positions for
the text. That's ugly.

It would be nice if we had a TeX-like approach, where I could create a green
text object and a blue text object, then assemble them by stacking boxes.

Any ideas?

I have taken this approach as well. See part of my answer at http://stackoverflow.com/questions/17086847/box-around-text-in-matplotlib/17092777#17092777

···

On Oct 30, 2013, at 7:47AM, Scott Lasley wrote:

On Oct 30, 2013, at 10:14, Neal Becker <ndbecker2@...287...> wrote:

I have a blue line plot and a green line plot. I'd like to add some figtext at
the bottom, and I'd like the text colors to match the plot colors. So I'd have
some text in blue and some in green.

figtext only allows one color

I could use 2 figtext, but then I have to manually find coordinate positions for
the text. That's ugly.

It would be nice if we had a TeX-like approach, where I could create a green
text object and a blue text object, then assemble them by stacking boxes.

Any ideas?

I'm not sure it's the best approach, but I've used HPacker (or VPacker if you want more than one line) to do this