Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python matplotlib自定义图例中类别的子标题_Python_Matplotlib_Legend - Fatal编程技术网

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

Python matplotlib自定义图例中类别的子标题,python,matplotlib,legend,Python,Matplotlib,Legend,我有一个像这样的数字: 我想制作一个这样的传奇: 我该怎么做 更新: 请注意,此图例有一个带有edgecolor的框架:有效答案将包括此内容。图例也应嵌入轴中 我想要的图例可能无法使用ax.legend()实现。一个很好的答案是展示如何使用补丁和文本或任何有意义的matplotlib方法手动构建我想要的图例(完全如图所示)。D行和A行的单独标题: from matplotlib.pyplot import * ds = [1,2,3] dc = [1.1, 1.9, 3.2] asim =

我有一个像这样的数字:

我想制作一个这样的传奇:

我该怎么做


更新:

请注意,此图例有一个带有edgecolor的框架:有效答案将包括此内容。图例也应嵌入轴中


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

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()

1。制作一个普通的传说。2.添加DEF和ABC作为标签。框架上的标签如何?卸下框架,并单独安装。事后想一想-您已经完成了!只需将其保存为图片并将其放置在绘图上即可。完成:)我想说的是,您有一些自定义结构,它不再是真正合格的“图例”。你所能做的就是用碎片自己建造它…谢谢@cphlewis。我更新了我的问题。也许这可以通过将它们推到一起、抑制它们的帧并手动添加更大的帧来实现?注意:我不知道怎么做。我昨晚编辑了我的代码——当前版本应该在单个框中的所有图例项周围显示一个框架。它与您的示例的不同之处在于,D和A标题位于c/s图例项的上方,而不是其左侧。(标准图例框中的默认对齐方式更易于使用。)我喜欢子分类,它有助于易读性,尤其是在单色打印中。好主意。。。。并再次编辑,因此现在您应该得到两个图例示例,子分类为垂直或水平。@EdwardNewell--另请参阅有关裁剪bbox以优化水平选项的链接问题。现在是带有标准图例调用的分组绘图图像。