Python- Matplotlib将移动图表标题到y轴

8
我目前正在使用Python中的Matplotlib来绘制一些数据图表,然而我希望图表的标题在Y轴上,因为一个图表的标题和另一个图表的x轴标签之间没有足够的空间。我知道我可以将hspace设置为更大的数字,但我不想这样做,因为我计划在彼此之上堆叠几个图表,如果我调整了hspace,那么图表将会变得很短并且更难读取。 like this 以下是我的代码:
#EXAMPLE CODE
import numpy as np
import matplotlib.pyplot as plt


fig=plt.figure()
rect = fig.patch
rect.set_facecolor('#31312e')

x = [1,2,3,4,5,6,7,8]
y = [4,3,8,2,8,0,3,2]
z = [2,3,0,8,2,8,3,4]


ax1 = fig.add_subplot(2,1,1, axisbg='gray')
ax1.plot(x, y, 'c', linewidth=3.3)
ax1.set_title('title', color='c')
ax1.set_xlabel('xlabel')
ax1.set_ylabel('ylabel')

ax2 = fig.add_subplot(2,1,2, axisbg='gray')
ax2.plot(x, z, 'c', linewidth=3.3)
ax2.set_xlabel('xlabel')
ax2.set_ylabel('ylabel')



plt.show()

Thanks In advance


3
总评:最好将代码缩小到最小可能的例子。看看我的回复就能理解这个意思。(翻译者注:此处为一般性建议,建议程序员在提问时提供最小可行例子以便于问题描述和解答。回答者已经给出了自己的回复作为示例展示如何做到这一点。) - Paul H
@PaulH 谢谢,我把它简化了一点。 - JVarhol
3个回答

11

试试这个:

ax1.set_title('title1', color='c', rotation='vertical',x=-0.1,y=0.5)
ax2.set_title('title2', color='c', rotation='vertical',x=-0.1,y=0.5)

谢谢@xndrme,我发现这非常有用,而且我很感激不需要再添加更多的代码。 - JVarhol

5

在matplotlib图中,所有文本元素都有get_positionset_position方法。如果你捕获坐标轴标签的坐标并使用它们设置标题的坐标加上一点偏移量,那么这个过程就会变得非常简单。(编辑:这些坐标的单位是图形宽度和高度的分数。即(0,0)是左下角,(1,1)是右上角)

fig, axes = plt.subplots(nrows=2)
ax0label = axes[0].set_ylabel('Axes 0')
ax1label = axes[1].set_ylabel('Axes 1')

title = axes[0].set_title('Title')

offset = np.array([-0.15, 0.0])
title.set_position(ax0label.get_position() + offset)
title.set_rotation(90)

fig.tight_layout()

enter image description here


偏移量对我的情况不起作用。标题位于左上角旋转90度,而不是在轴0位置。 - user0193

0
我也尝试了同样的事情,发现ax.annotate非常有用。
示例:
ax1.annotate('vertical title', (-0.65, 0.5), xycoords = 'axes fraction', rotation = 90, va = 'center', fontweight = 'bold', fontsize = 10)

坐标设置为axes fraction,因此x位置参数(这里是-0.65)将文本设置在Y轴的左侧,因为它是一个负值,并将Y位置(这里是0.5)设置在Y轴的中间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接