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.05,0.05,"all unicorns poop rainbows ! ! !".split(),
['red', 'orange', 'brown', 'green', 'blue', 'purple', 'black'],
size=20)
4条答案
按热度按时间emeijp431#
我只知道如何做到这一点非交互式,即使这样,只有与'PS'后端。
要做到这一点,我会使用乳胶来格式化文本。然后我会包括'颜色'包,并设置您想要的颜色。
下面是一个这样做的例子:
这将导致(使用ImageMagick从ps转换为png,所以我可以在这里发布):
s4n0splo2#
这是交互式版本。**编辑:**修复了Matplotlib 3中产生额外空格的错误。
bgtovc5b3#
扩展Yann的答案,LaTeX着色现在also works with PDF export:
请注意,这个python脚本有时会在第一次尝试时失败,并出现
Undefined control sequence
错误。再次运行它就会成功。tvmytwxo4#
在尝试了以上所有的方法之后,我又回到了我愚蠢但简单的方法,使用
plt.text
。唯一的问题是你需要调整每个单词之间的空格。你可能需要调整几次位置,但我仍然喜欢这种方式,因为它1.使您不必安装tex编译器,
1.不需要任何特殊的后端,
1.使您不必配置matplotlib rc和configure back,或者由于usetex=True,它可能会减慢您的其他绘图速度