繁体   English   中英

阻止x轴标签缩小Matplotlib中的图?

[英]Stop x-axis labels from shrinking the plot in Matplotlib?

我正在尝试使用以下代码制作条形图:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

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.set_xticklabels(ax.get_xticklabels(), rotation=90)
plt.show()

但是我收到以下错误,因为在“名称”中作为x轴标签的long值正在使图像缩小,直到底部超过顶部为止。

Traceback (most recent call last):
  File "C:/Users/Adam/.PyCharm2018.2/config/scratches/scratch.py", line 11, in <module>
    plt.show()
  File "C:\Anaconda3\lib\site-packages\matplotlib\pyplot.py", line 253, in show
    return _show(*args, **kw)
  File "C:\Program Files\JetBrains\PyCharm 2018.2.3\helpers\pycharm_matplotlib_backend\backend_interagg.py", line 25, in __call__
    manager.show(**kwargs)
  File "C:\Program Files\JetBrains\PyCharm 2018.2.3\helpers\pycharm_matplotlib_backend\backend_interagg.py", line 107, in show
    self.canvas.show()
  File "C:\Program Files\JetBrains\PyCharm 2018.2.3\helpers\pycharm_matplotlib_backend\backend_interagg.py", line 62, in show
    self.figure.tight_layout()
  File "C:\Anaconda3\lib\site-packages\matplotlib\figure.py", line 2276, in tight_layout
    self.subplots_adjust(**kwargs)
  File "C:\Anaconda3\lib\site-packages\matplotlib\figure.py", line 2088, in subplots_adjust
    self.subplotpars.update(*args, **kwargs)
  File "C:\Anaconda3\lib\site-packages\matplotlib\figure.py", line 245, in update
    raise ValueError('bottom cannot be >= top')
ValueError: bottom cannot be >= top

如果稍微减少该名称的长度,则如下所示: 在此处输入图片说明

我如何才能扩大图形以适合标签而不是缩小轴?

一个解决办法是创建Axes自己实例作为坐标轴 ,而不是作为插曲。 然后,即使内部调用了tight_layout()也无效。 然后,您可以将带有ax关键字的Axes传递给sns.barplot 现在的问题是,如果调用plt.show() ,标签可能会被剪切掉,但是如果使用bbox_inches='tight'调用savefig ,则图形尺寸将扩展为既包含图形又包含所有标签:

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')

程序员:我没有pycharm ,因此在此代码中假设,有和没有pycharmmatplotlib行为相同。 无论如何,对我来说结果看起来像这样:

以上代码的结果

如果您希望在交互式后端中使用此控件,除了手动调整图形尺寸外,没有其他方法。 这是我使用qt5agg后端得到的:

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

在此处输入图片说明

请注意,pycharm的科学模式可能正在做一些魔术来阻止此工作,因此您可能需要停用它或只在pycharm外部运行脚本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM