Python 如何在matplotlib中设置轴和标签之间的空间

Python 如何在matplotlib中设置轴和标签之间的空间,python,numpy,matplotlib,data-visualization,Python,Numpy,Matplotlib,Data Visualization,我的代码: #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.subplot

我的代码:

#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()
上述代码给出:

我的问题:

#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()
如上图所示,Y标签“Y”与Y轴接触,X标签“X”与X轴之间存在空间

如何设置轴和标签之间的空间(例如xlabel和x轴之间存在空间)

我的尝试:

#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()
在上面的代码中,我注释了
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
预期输出:

#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()

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

ax.set_ylabel('Y', rotation=0, labelpad=10)
您还可以在set_ylabel行中的“Y”标签后面添加空格,如下所示

ax.set_ylabel('Y ',rotation=0)
注意:

#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()

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

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

'Y'标签使用:

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

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

ax.set_ylabel('Y', rotation=0, ha='right')
如果需要更多空间,可以使用以下设置

ax.yaxis.labelpad = 20

这个方法是fig.text(0.1,0.5,'Y')的替代方法。正如我在问题中提到的,我希望x标签和x轴之间有相同的空间量。顺便说一句,谢谢你的回答:)谢谢你的回答。它的工作+1正如你提到的,你希望两个轴标签之间有相同的空间,这样你就可以使用
ax.text设置“x”标签(max(x)/2,-(max(y)/10),'x')
和'y'标签使用
ax.text(-(max(x)/10),max(y)/2,'y')
我只是缺少
set_ylabel()
方法中的
labelpad
参数…因为您首先回答了…所以我接受这个答案…再次感谢:)您可以用
fig.text(0.1,0.5,'y')设置它
但此处X轴的范围为0到10,Y轴的范围为0到3000左右。因此,需要将值0.1和0.5分别设置为X轴和Y轴的比例。