在matplotlib图例中为标签使用不同的字体属性

时间:2017-05-10 18:05:15

标签: python matplotlib legend legend-properties

我想在matplotlib图中的同一个图例中使用2种不同的字体大小。

例如,我想对某些标签使用15磅粗体字,对同一图例框中的其他标签使用10磅普通字体。

我的情节图例已经从2个轴(Single legend for multiple axes)重新组合了图例并且绘制了可变数量的数据。

我已经使用空白数据策略向图例图(Is it possible to add a string as a legend item in matplotlib)添加注释。但是如果可能的话,我想用更大尺寸的螺栓来制造它。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以在图例()中包含的Text对象上使用以下模式:

leg = plt.legend()

for i, text in enumerate(leg.get_texts()):

    # pretend the element to be changed is in index position 3
    if i == 3: 
        text.set_weight("bold")
        text.set_size("x-large")

        # or equivalently with one call to setp()
        plt.setp(text, weight="bold", size="x-large")

编辑: 看起来在图例中的一个文本对象中更改内容实际上适用于所有对象。一种有效的解决方法是像text.set_text(r'$\mathbf{label}$')一样使用mathtext。在循环中,我们需要检索标签并处理mathtext“压缩”空格。这是一个例子:

line1, = plt.plot([3,2,1], marker='o', label='Line 1 label is long and has spaces')
line2, = plt.plot([1,2,3], marker='o', label='Line 2')
leg = plt.legend()

for i, text in enumerate(leg.get_texts()):

    # the element to be changed is in index position 0
    if i == 0: 
        t = text.get_text()
        new_label = "".join([i + r"\/" for i in t.split()])
        text.set_text(r'$\mathbf{}$'.format("{" + new_label + "}"))

我不知道您是否接受使用mathtext或latex,但它似乎允许单个图例文本标签的唯一格式。