首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Matplotlib -全局图例和标题旁的子图

Matplotlib -全局图例和标题旁的子图
EN

Stack Overflow用户
提问于 2011-09-23 17:05:13
回答 3查看 138.1K关注 0票数 145

我已经开始使用matplot并管理了一些基本的图,但现在我发现很难找到如何做一些我现在需要的东西:(

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

我正在做2x3的子图,我有很多不同颜色的不同图形(大约200个)。为了区分(大多数)它们,我写了类似这样的代码

代码语言:javascript
复制
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种风格上(我不需要完全独特的风格,但至少有一些尝试)

有人能帮我解决这个任务吗?

EN

回答 3

Stack Overflow用户

发布于 2015-08-21 18:25:38

除了orbeckst answer之外,人们可能还想将子情节向下移动。这是一个OOP风格的MWE:

代码语言:javascript
复制
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")

提供:

票数 83
EN

Stack Overflow用户

发布于 2011-09-23 20:26:57

对于图例标签,可以使用类似下面的内容。图例标签是保存的绘图线。modFreq是与绘制线相对应的实际标签的名称。然后第三个参数是图例的位置。最后,您可以传入任何参数,就像我在下面介绍的,但主要需要前三个参数。此外,如果在plot命令中正确设置了标签,则应执行此操作。只需使用location参数调用legend,它就会找到每行中的标签。我有更好的运气创造我自己的传奇,如下所示。似乎在所有情况下都有效,似乎从来没有得到正确的另一种方式。如果你不明白,请告诉我:

代码语言:javascript
复制
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

代码语言:javascript
复制
f.text(0.5,0.975,'The new formatter, default settings',horizontalalignment='center',
       verticalalignment='top')
票数 7
EN

Stack Overflow用户

发布于 2012-10-15 07:53:08

suptitle似乎是个不错的选择,但实际上,figure有一个transFigure属性,您可以使用它:

代码语言:javascript
复制
fig=figure(1)
text(0.5, 0.95, 'test', transform=fig.transFigure, horizontalalignment='center')
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7526625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档