我有以下情节:
import matplotlib.pyplot as plt
fig2 = plt.figure()
ax3 = fig2.add_subplot(2,1,1)
ax4 = fig2.add_subplot(2,1,2)
ax4.loglog(x1, y1)
ax3.loglog(x2, y2)
ax3.set_ylabel('hello')
我想创建跨越两个子图的轴标签和标题。例如,由于两个图具有相同的轴,我只需要一组xlabel
和ylabel
。我确实希望每个子图有不同的标题。
我如何才能做到这一点?
9条答案
按热度按时间7vux5j2d1#
使用
subplots
的一个简单方法:ev7lccsx2#
matplotlib 3.4.0新增功能
现在有内置的方法来设置公共轴标签:
*
supxlabel
*
supylabel
要重现OP的
loglog
图(通用标签但单独标题):cunj1qz13#
plt.setp()
将执行以下操作:zy1mlcev4#
如果你不想导出矢量图形,或者你已经将matplotlib后端设置为忽略无色轴,那么廖文伟的答案是好的;否则隐藏的轴将显示在导出的图形中。
我的答案
suplabel
在这里类似于fig.suptitle
,它使用fig.text
函数。因此,没有轴艺术家被创建和无色。但是,如果你试图调用它多次,你会得到文本添加在对方的顶部(fig.suptitle
也是)。Wen-wei Liao的答案不是,因为如果fig.add_subplot(111)
已经创建,它将返回相同的Axes对象。我的函数也可以在绘图创建后调用。
ecfdbz9o5#
这里有一个解决方案,您可以设置其中一个图的标签并调整它的位置,使其垂直居中。这样您就可以避免KYC提到的问题。
e7arh2l66#
pdkcd3nj7#
当yticks很大时,其他答案中的方法将无法正常工作。ylabel将与ticks重叠,在左侧被剪裁或完全不可见/在图的外部。
我修改了Hagne的答案,使其适用于xlabel和ylabel的多列子图,并移动图以保持图中的ylabel可见。
它适用于以下示例,而Hagne的答案不会绘制ylabel(因为它在画布之外),KYC的ylabel与tick标签重叠:
或者,如果你对无色轴没问题,我修改了Julian Chen的解决方案,这样ylabel就不会与tick标签重叠。
基本上,我们只需要设置colorless的ylim,使其匹配子图的最大ylim,这样colorless tick标签就可以为ylabel设置正确的位置。
同样,我们必须缩小图以防止剪切。这里我已经硬编码了要缩小的量,但是你可以找到一个适合你的数字,或者像上面的方法一样计算它。
q5lcpyga8#
你可以在轴中使用“set”,如下所示:
6qftjkof9#
您可以创建一个覆盖两个子图的大子图,然后设置公共标签。
另一种方法是使用图text()直接设置公共标签的位置。