Stop X-axis Labels From Shrinking The Plot In Matplotlib?
Solution 1:
One workaround is to create the Axes
instance yourself as axes, not as subplot. Then tight_layout()
has no effect, even if it's called internally. You can then pass the Axes
with the ax
keyword to sns.barplot
. The problem now is that if you call plt.show()
the label may be cut off, but if you call savefig
with bbox_inches='tight'
, the figure size will be extended to contain both the figure and all labels:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
test = {'names':['a','b','abcdefghijklmnopqrstuvwxyz123456789012345678901234567890'], 'values':[1,2,3]}
df = pd.DataFrame(test)
#plt.rcParams['figure.autolayout'] = False
ax = sns.barplot(x='names', y='values', data=df, ax=ax)
ax.set_xticklabels(ax.get_xticklabels(), rotation=90)
#plt.show()
fig.savefig('long_label.png', bbox_inches='tight')
PROCLAIMER: I don't have pycharm
, so there goes the assumption in this code, that matplotlib
behaves the same with and without pycharm
. Anyway, for me the outcome looks like this:
Solution 2:
If you want this in an interactive backend I didn't find any other way than manually adjust the figure size. This is what I get using the qt5agg
backend:
ax = sns.barplot(x='names', y='values', data=df)
ax.set_xticklabels(ax.get_xticklabels(), rotation=90)
ax.figure.set_size_inches(5, 8) # manually adjust figure size
plt.tight_layout() # automatically adjust elements inside the figure
plt.show()
Note that pycharm's scientific mode might be doing some magic that prevents this to work so you might need to deactivate it or just run the script outside pycharm.
Post a Comment for "Stop X-axis Labels From Shrinking The Plot In Matplotlib?"