每个子图规格的标题(子图内的子图)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每个子图规格的标题(子图内的子图)相关的知识,希望对你有一定的参考价值。
我想制作一个具有2x2外部布局并在这2x3布局的每个布局内的图。我设法使用gridSpec使一切正常,但是似乎无法为每个subplotSpec分配一个标题(有2x2 subplotSpec)。
Row titles for matplotlib subplot原则上,这应该给我解决方案,但是我想知道是否存在使用gridSpec而不隐藏白框的方法。
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
netdict = ["chain","V"]
sigdict = ["no","with"]
fig = plt.figure(figsize=(10, 8))
outer = gridspec.GridSpec(2, 2, wspace=0.3, hspace=0.3) # make a 2x2 outer frame
for ni, networktype in enumerate(netdict):
for si, sigtype in enumerate(sigdict):
fig.add_subplot(outer[ni*2+si])
plt.title(networktype+ " " + sigtype) # title for each outer frame
plt._frameon=False # this should make the unnecessary white frame go away
inner = gridspec.GridSpecFromSubplotSpec(2, 3, # make 2x3 inner frame
subplot_spec=outer[ni*2+si], wspace=0.4, hspace=0.4)
for ti,tau in enumerate([5.5,12.5]):
for u, xy_delay in enumerate([0,tau,2*tau]):
ax = plt.Subplot(fig, inner[ti*3+u])
ax.plot(np.sin(np.linspace(0,10,0.5))
ax.set(title=r"$\tau_u={}$".format(xy_delay))
fig.add_subplot(ax)
plt.show()
答案
只是偶然发现了这一点,因为我不得不做类似的事情。我发现一个简单的解决方案是为外部网格创建另一个子图,然后简单地将其轴关闭:
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
fig = plt.figure(figsize=(12, 6))
outer = gridspec.GridSpec(1, 2, wspace=0.2, hspace=0.2)
for i, layer in enumerate(layer_list):
# create inner plots
inner = gridspec.GridSpecFromSubplotSpec(2, 2,
subplot_spec=outer[i], wspace=0.1, hspace=0.1)
# set outer titles
ax = plt.Subplot(fig, outer[i])
ax.set_title("Layer {}".format(layer))
ax.axis('off')
fig.add_subplot(ax)
for j, filter_pos in enumerate(filter_pos_list):
# create image plot
ax = plt.Subplot(fig, inner[j])
# load image
img = ...
ax.imshow(img)
# set inner title
ax.set_title("Filter {}".format(filter_pos))
ax.set_xticks([])
ax.set_yticks([])
fig.add_subplot(ax)
fig.show()
以上是关于每个子图规格的标题(子图内的子图)的主要内容,如果未能解决你的问题,请参考以下文章
python使用matplotlib可视化使用subplots子图subplots绘制子图并为可视化的每个子图添加标题(title for each subplots)