在matplotlib中,如何对图例中的标签进行部分样式设置?

62

有没有可能让图例中的一部分文本以特定的样式呈现,例如粗体斜体


你尝试过图例的文本格式是否有效吗? - silvado
3个回答

56

$$之间编写内容,以便强制matplotlib进行解析。

import matplotlib.pyplot as plt

plt.plot(range(10), range(10), label = "Normal text $\it{Italics}$")
plt.legend()
plt.show()

12
确实,这个答案比被接受的答案容易得多,并且不需要安装LaTeX。要使用粗体文本,请使用\bf而不是\it - ImportanceOfBeingErnest
2
@homayoun,\it 可以正常工作,但 \bf 不能。有没有文档链接?还有哪些 \handles 可用? - dmeu
11
@dmeu 对于加粗应该使用 \bf(双斜杠)。 - Claudiu Creanga
5
对于句子无效:由于该功能是针对数学公式而非文本,单词之间的空格会消失。您需要分别加粗/斜体每个单词。 - Åsmund
7
在数学模式中使用“\ ”(反斜杠空格)可以插入一个空格。 $these\ are\ words$。 了解$\mathrm{whatever}$也很有用。 - travc
显示剩余3条评论

44

正如silvado在他的评论中提到的,您可以使用LaTeX渲染来更灵活地控制文本的渲染。 有关更多信息,请参见此处:http://matplotlib.org/users/usetex.html

一个例子:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rc

# activate latex text rendering
rc('text', usetex=True)

x = np.arange(10)
y = np.random.random(10)
z = np.random.random(10)

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y, label = r"This is \textbf{line 1}")
ax.plot(x, z, label = r"This is \textit{line 2}")
ax.legend()
plt.show()

在这里输入图片描述

请注意标签字符串前的'r'。由于这个原因,反斜杠将被视为LaTeX命令,而不是Python所解释的方式(因此您可以键入\textbf而不是\\textbf)。


1
谢谢,这正是我在寻找的!如果有人需要帮助,我在Ubuntu 11.10中运行示例代码时遇到了问题,直到我安装了texlive(我只安装了texlive-basetexlive-latex-extra包)。 - englebip
2
在Ubuntu 12.04上,我需要安装texlivetexlive-latex-extradvipng才能使这个例子正常工作。 - Ulrich Stern
在最新版本的Ubuntu 19.10上,您还需要安装cm-super。因此,现在需要安装的整个软件包列表将在单个安装命令中列出如下:**sudo apt-get install dvipng texlive-latex-extra texlive-fonts-recommended cm-super**。 - kmario23
我无法将文本设置为无衬线字体(如Helvetica)并带有斜体。我尝试使用\mathregular,但没有任何变化。 - s.ouchene

6

通过修复那个答案中的问题,为上面的答案添加更多选项,使用OO接口而不仅仅是基于状态的pyplot接口,可能会在文本中包含空格,并增加粗体选项以及斜体

ax.legend(handles=legend_handles,
          labels=legend_labels,
          loc='upper right',
          shadow=True,
          fancybox=True,
          facecolor='#C19A6B',
          title="$\\bf{BOLDFACED\ TITLE}$",     # to boldface title with space in between
          prop={'size': 12, 'style': 'italic'}  # properties for legend text
         )

对于带有空格的斜体标题,请将上述title替换为以下内容:

 title="$\\it{ITALICIZED\ TITLE}$",

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接