'How to set space between the axis and the label in matplotlib
My code:
#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()
The above code gives:
My Question:
So as you have saw the above plot the ylabel 'Y' is touching with the y-axis and there is space between the xlabel 'X' and x-axis
How can I set space between the axis and the label(like there is a space between xlabel and x-axis)?
My attempt:
In the above code I commented set_ylabel()
method and tried text()
method
#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
Expected output:
Solution 1:[1]
You can set bounding by using labelpad argument like this
ax.set_ylabel('Y', rotation=0, labelpad=10)
also you can add space after 'Y ' label in set_ylabel line as following
ax.set_ylabel('Y ',rotation=0)
Note:
As you mentioned you want the same spaces between both axis labels so you can set 'X' label using:
ax.text(max(x)/2, -(max(y)/10),'X')
and
'Y' label using:
ax.text(-(max(x)/10), max(y)/2,'Y')
Solution 2:[2]
If you adjust the horizontal position of the label, you will have the same space as usual.
ax.set_ylabel('Y', rotation=0, ha='right')
If you need more space, you can use the following settings.
ax.yaxis.labelpad = 20
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 |