From: Paul I. <piv...@gm...> - 2012-02-07 21:47:02
|
Benjamin Root, on 2012-02-07 13:46, wrote: > Also, how deep should this rabbit hole go? I could imagine one could want > this for title() and figtitle(). Maybe it would be best to implement this > at the Text() constructor level? For this reason, I would discourage even implementing such functionality in the core of matplotlib. This functionality doesn't strike me as something that ought to be available everywhere by default - if someone needs it, they can implement it as follows: ----- import matplotlib.pyplot as plt from matplotlib import transforms def rainbow_text(x,y,ls,lc,**kw): """ Take a list of strings ``ls`` and colors ``lc`` and place them next to each other, with text ls[i] being shown in color lc[i]. This example shows how to do both vertical and horizontal text, and will pass all keyword arguments to plt.text, so you can set the font size, family, etc. """ t = plt.gca().transData fig = plt.gcf() plt.show() #horizontal version for s,c in zip(ls,lc): text = plt.text(x,y," "+s+" ",color=c, transform=t, **kw) text.draw(fig.canvas.get_renderer()) ex = text.get_window_extent() t = transforms.offset_copy(text._transform, x=ex.width, units='dots') #vertical version for s,c in zip(ls,lc): text = plt.text(x,y," "+s+" ",color=c, transform=t, rotation=90,va='bottom',ha='center',**kw) text.draw(fig.canvas.get_renderer()) ex = text.get_window_extent() t = transforms.offset_copy(text._transform, y=ex.height, units='dots') plt.figure() rainbow_text(0.5,0.5,"all unicorns poop rainbows ! ! !".split(), ['red', 'orange', 'brown', 'green', 'blue', 'purple', 'black'], size=40) best, -- Paul Ivanov 314 address only used for lists, off-list direct email at: http://pirsquared.org | GPG/PGP key id: 0x0F3E28F7 |