如何设置坐标轴和标签之间的间距

22

我的代码:

#importing required libraries
import numpy as np
from matplotlib.patches import Polygon
import matplotlib.pyplot as plt


#plotting data

def func(x):
    return (x-3)*(x+2)*(3*x+5)+25
a,b=2,9
x=np.linspace(0,10,30)
y=func(x)
fig,ax=plt.subplots(1,1,dpi=135)
ax.plot(x,y,linewidth=2.5,color='c')
ix=np.linspace(a,b)
iy=func(ix)
verts=[(a,0),*zip(ix,iy),(b,0)]
poly=Polygon(verts,facecolor='0.7',edgecolor='0.9')
ax.add_patch(poly)
ax.set_ylim(bottom=0)
ax.text(6.5,150,r'$\int_a^b f(x)$',horizontalalignment='center',fontsize=15)
ax.set_xlabel('X')
ax.set_ylabel('Y',rotation=0)
ax.set_xticks((a,b))
ax.set_xticklabels(('a','b'))
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.xaxis.set_ticks_position('bottom')
ax.set_yticks([])
plt.show()
上面的代码输出结果为:

enter image description here

我的问题:

您看到上面的图,纵坐标轴标签“Y”与纵轴相接触,而横坐标轴标签“X”和横轴之间有空白。

我该如何设置轴和标签之间的间距(就像x轴标签和x轴之间有一段空白)?

我的尝试:

在上面的代码中,我注释了set_ylabel()方法并尝试使用text()方法。

#ax.set_ylabel('Y',rotation=0)
fig.text(0.1,0.5,'Y')
#this code creating a little space between y label and y-axis but I want the same amount of space that is between x label an x axis

预期输出:

在此输入图片描述

2个回答

30

您可以使用labelpad参数来设置边界,就像这样

ax.set_ylabel('Y', rotation=0, labelpad=10)

同时,您可以按照以下方式在set_ylabel行中的“Y”标签后添加空格:

also you can add space after 'Y ' label in set_ylabel line as following

ax.set_ylabel('Y ',rotation=0)

注意:

如您所提到的,您希望两个轴标签之间有相同的间距,因此您可以使用以下方式设置'X'标签:

 ax.text(max(x)/2, -(max(y)/10),'X')

使用'Y'标签:

 ax.text(-(max(x)/10), max(y)/2,'Y')

正如您所提到的,您希望两个轴标签之间有相同的间距,因此您可以使用ax.text(max(x)/2, -(max(y)/10),'X')设置“X”标签和ax.text(-(max(x)/10), max(y)/2,'Y')设置“Y”标签。 - Zalak Bhalani
1
我只是在set_ylabel()方法中缺少了labelpad参数...由于您第一个回答了我的问题...所以我接受这个作为答案...再次感谢 :) - Anurag Dabas
1
你可以使用 fig.text(0.1,0.5,'Y') 来设置。但是这里的 X 轴范围从 0 到 10,而 Y 轴范围从 0 到大约 3000。因此,你需要将值 0.1 和 0.5 分别设置为 X 轴和 Y 轴的比例。 - Zalak Bhalani

5

如果你调整标签的水平位置,你将拥有与通常相同的空间。

ax.set_ylabel('Y', rotation=0, ha='right')

如果您需要更多的空间,您可以使用以下设置。
ax.yaxis.labelpad = 20

这种方法可以替代 fig.text(0.1, 0.5, 'Y') ... 正如我在问题中提到的,我希望在 x 标签和 x 轴之间有相同的间距... 另外感谢你的回答 :) - Anurag Dabas

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