Matplotlib - 全局图例和标题旁白子图

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

我的实际问题是如何在带有子图的图形上放置全局标题和全局图例。

我正在做 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个样式(我不需要完全独特的样式,但至少有一些尝试)

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

162173 次浏览

对于图例标签可以使用下面这样的内容。传奇标签是保存的情节线。ModFreq 是与情节线对应的实际标签的名称。第三个参数是图例的位置。最后,你可以传入任何参数,就像我在这里所说的,但主要是需要前三个参数。另外,如果在 plot 命令中正确设置了标签,则应该这样做。只要调用带有位置参数的 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)

您还可以使用这条腿来更改字体大小或图例的几乎任何参数。

上述评论中提到的全球标题可以通过按所提供的链接添加文字来实现: Http://matplotlib.sourceforge.net/examples/pylab_examples/newscalarformatter_demo.html

f.text(0.5,0.975,'The new formatter, default settings',horizontalalignment='center',
verticalalignment='top')

Global title : 在 matplotlib 的新版本中,可以使用 Figure图.subtitle ()方法:

import matplotlib.pyplot as plt
fig = plt.gcf()
fig.suptitle("Title centered above all subplots", fontsize=14)

或者(根据下面 @ Steven C. Howell的评论(谢谢!)) ,使用 Matplotlib.pyplot.suptitle () 函数:

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

除了 或者最佳答案之外,人们可能还想把次要情节往下移:

import matplotlib.pyplot as plt


fig = plt.figure()
st = fig.suptitle("suptitle", fontsize="x-large")


ax1 = fig.add_subplot(311)
ax1.plot([1,2,3])
ax1.set_title("ax1")


ax2 = fig.add_subplot(312)
ax2.plot([1,2,3])
ax2.set_title("ax2")


ax3 = fig.add_subplot(313)
ax3.plot([1,2,3])
ax3.set_title("ax3")


fig.tight_layout()


# shift subplots down:
st.set_y(0.95)
fig.subplots_adjust(top=0.85)


fig.savefig("test.png")

提供:

enter image description here