Matplotlib-全局图例和标题旁边的子地块

Matplotlib-全局图例和标题旁边的子地块,matplotlib,title,legend,subplot,Matplotlib,Title,Legend,Subplot,我从matplot开始,管理了一些基本的绘图,但现在我发现很难发现如何做一些我现在需要的东西:( 我真正的问题是,如何将全局标题和全局图例放置在具有子地块的图形上 我正在做2x3子图,其中有很多不同颜色的图(大约200个) def style(i, total): return dict(color=jet(i/total), linestyle=["-", "--", "-.", ":"][i%4], marker=["+

我从matplot开始,管理了一些基本的绘图,但现在我发现很难发现如何做一些我现在需要的东西:(

我真正的问题是,如何将全局标题和全局图例放置在具有子地块的图形上

我正在做2x3子图,其中有很多不同颜色的图(大约200个)

def style(i, total):
    return dict(color=jet(i/total),
                linestyle=["-", "--", "-.", ":"][i%4],
                marker=["+", "*", "1", "2", "3", "4", "s"][i%7])

fig=plt.figure()
p0=fig.add_subplot(321)
for i, y in enumerate(data):
    p0.plot(x, trans0(y), "-", label=i, **style(i, total))
# and more subplots with other transN functions
(对此有何想法?:)每个子绘图都有相同的样式功能

现在,我正试图为所有子地块获得一个全局标题,以及一个解释所有样式的全局图例。此外,我需要使字体很小,以适应那里的所有200种样式(我不需要完全独特的样式,但至少需要一些尝试)


有人能帮我解决这个问题吗?

对于图例标签,可以使用下面的方法。Legendlabels是保存的打印线。modFreq是与打印线对应的实际标签的名称。第三个参数是图例的位置。最后,您可以传入任何参数,正如我在这里介绍的,但主要需要前三个参数。此外,如果在“打印”命令中正确设置标签,则应该进行打印。只需使用location参数调用legend,它就会在每一行中找到标签。我有更好的运气制作我自己的传奇如下。似乎在任何情况下都能正常工作,而在任何情况下,似乎都无法正常工作。如果您不明白,请告诉我:

legendLabels = []
for i in range(modSize):
    legendLabels.append(ax.plot(x,hstack((array([0]),actSum[j,semi,i,semi])), color=plotColor[i%8], dashes=dashes[i%4])[0]) #linestyle=dashs[i%4]       
legArgs = dict(title='AM Templates (Hz)',bbox_to_anchor=[.4,1.05],borderpad=0.1,labelspacing=0,handlelength=1.8,handletextpad=0.05,frameon=False,ncol=4, columnspacing=0.02) #ncol,numpoints,columnspacing,title,bbox_transform,prop
leg = ax.legend(tuple(legendLabels),tuple(modFreq),'upper center',**legArgs)
leg.get_title().set_fontsize(tick_size)
您还可以使用支腿更改字体大小或图例的几乎任何参数

上述评论中所述的全局标题可以通过在提供的链接中添加文本来完成:


全局标题:在matplotlib的较新版本中,可以使用
图的方法

import matplotlib.pyplot as plt
fig = plt.gcf()
fig.suptitle("Title centered above all subplots", fontsize=14)
或者(根据下面的评论(谢谢!)),使用以下功能:

 import matplotlib.pyplot as plt
 # plot stuff
 # ...
 plt.suptitle("Title centered above all subplots", fontsize=14)

suptitle
似乎是一个不错的选择,但不管它值多少钱,
figure
有一个
transFigure
属性,您可以使用:

fig=figure(1)
text(0.5, 0.95, 'test', transform=fig.transFigure, horizontalalignment='center')
除此之外,您可能还希望向下移动子地块。以下是一个OOP风格的MWE:

导入matplotlib.pyplot作为plt
图=plt.图()
st=图suptitle(“suptitle”,fontsize=“x-large”)
ax1=图添加子批次(311)
ax1.绘图([1,2,3])
ax1.设置标题(“ax1”)
ax2=图添加_子批次(312)
ax2.绘图([1,2,3])
ax2.设置标题(“ax2”)
ax3=图添加子批次(313)
ax3.绘图([1,2,3])
ax3.设置标题(“ax3”)
图1紧_布局图()
#向下移动子地块:
圣塞图伊(0.95)
图子批次调整(顶部=0.85)
图savefig(“test.png”)
给出:


全局标题:对于像这样导入的对象:
import matplotlib.pyplot as plt
,可以简单地将命令输入为
plt.figure();plt.suptitle(“位于所有子地块上方的标题”);小地块(231);plt.绘图(数据[:,0],数据[:,1])等等…谢谢。这应该是实际选择的答案。这应该是最佳答案!接受的答案引入了另一个依赖项,因此不能正确回答OP问题。
fig=figure(1)
text(0.5, 0.95, 'test', transform=fig.transFigure, horizontalalignment='center')