matplotlib 自定义图例中类别的副标题

Posted

技术标签:

【中文标题】matplotlib 自定义图例中类别的副标题【英文标题】:Subheadings for categories within matplotlib custom legend 【发布时间】:2014-03-01 10:57:24 【问题描述】:

我有一个像这样的图:

我想做一个像这样的图例:

我该怎么做?


更新:

请注意,此图例有一个带有边缘颜色的框架:有效答案将包括此。图例也应该嵌入到坐标区中。

使用ax.legend() 可能无法实现我想要的图例。一个很好的答案是展示如何使用补丁和文本或任何有意义的 matplotlib 方法手动构建我想要的图例(如图所示)。

【问题讨论】:

我创建了一个 tablelegend 函数 in this answer 可能对此有用。 【参考方案1】:

D 行和 A 行的单独标题:

from matplotlib.pyplot import *
ds = [1,2,3]
dc = [1.1, 1.9, 3.2]
asim = [1.5, 2.2, 3.1]
ac = [1.6, 2.15, 3.1]

categories = ['simulated', 'calculated']

p1, = plot(ds, 'ko', label='D simulated')
p2, = plot(dc, 'k:', label='D calculated')
p3, = plot(asim, 'b+', label='A simulated')
p4, = plot(ac, 'b-', label='A calculated')
p5, = plot([0], marker='None',
           linestyle='None', label='dummy-tophead')
p7, = plot([0],  marker='None',
           linestyle='None', label='dummy-empty')

leg3 = legend([p5, p1, p2, p5, p3, p4],
              [r'$D_etc$'] + categories + [r'$A_etc$'] + categories,
              loc=2, ncol=2) # Two columns, vertical group labels

leg4 = legend([p5, p7, p5, p7, p1, p2, p3, p4],
              [r'$D_etc$', '', r'$A_etc$', ''] + categories + categories,
              loc=4, ncol=2) # Two columns, horizontal group labels

gca().add_artist(leg3)

#If there isn't a big empty spot on the plot, two legends:
#leg1 = legend([p1, p2], categories, title='D_etc', loc=0)
#leg2 = legend([p3, p4], categories, title='A_etc', loc=4)
#gca().add_artist(leg2) 

show()

【讨论】:

以上是关于matplotlib 自定义图例中类别的副标题的主要内容,如果未能解决你的问题,请参考以下文章

matplotlib (python) - 在没有 pyplot 的情况下为多个绘图创建单个自定义图例

Python可视化(matplotlib)图像自定义图例(Legend)

Matplotlib Legend 中的自定义艺术家

python使用matplotlib可视化为可视化图像添加图例(legend)自定义图例的字体格式字体大小字体颜色等

For 循环中的 Matplotlib 图例

如何避免重复的图例标签或通过自定义图例标签