Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 是否停止x轴标签在Matplotlib中收缩绘图?_Python 3.x_Matplotlib_Pycharm_Seaborn - Fatal编程技术网

Python 3.x 是否停止x轴标签在Matplotlib中收缩绘图?

Python 3.x 是否停止x轴标签在Matplotlib中收缩绘图?,python-3.x,matplotlib,pycharm,seaborn,Python 3.x,Matplotlib,Pycharm,Seaborn,我正在尝试用以下代码制作条形图: 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.autolayo

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

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()
但是我得到了以下错误,因为“names”中的长值作为x轴上的标签使图像收缩,直到底部高于顶部

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
回溯(最近一次呼叫最后一次):
文件“C:/Users/Adam/.PyCharm2018.2/config/scratch/scratch.py”,第11行,在
plt.show()
文件“C:\Anaconda3\lib\site packages\matplotlib\pyplot.py”,第253行,在show中
返回显示(*参数,**千瓦)
文件“C:\Program Files\JetBrains\PyCharm 2018.2.3\helpers\PyCharm\u matplotlib\u backend\backend\u interagg.py”,第25行,在调用中__
经理展示(**kwargs)
文件“C:\Program Files\JetBrains\PyCharm 2018.2.3\helpers\PyCharm\u matplotlib\u backend\backend\u interagg.py”,第107行,显示
self.canvas.show()
文件“C:\Program Files\JetBrains\PyCharm 2018.2.3\helpers\PyCharm\u matplotlib\u backend\backend\u interagg.py”,第62行,显示
self.figure.tight_布局()
文件“C:\Anaconda3\lib\site packages\matplotlib\figure.py”,第2276行,紧凑布局
自我调整子批次(**kwargs)
文件“C:\Anaconda3\lib\site packages\matplotlib\figure.py”,第2088行,在子地块中
self.subplotpars.update(*args,**kwargs)
更新中第245行的文件“C:\Anaconda3\lib\site packages\matplotlib\figure.py”
raise VALUERROR('底部不能>=顶部')
ValueError:底部不能>=顶部
下面是如果我稍微缩短该名称的长度时的情况:


如何使图形扩展以适合标签,而不是收缩轴?

一种解决方法是将
实例自己创建为轴,而不是子地块。然后
tight\u layout()
没有效果,即使它是在内部调用的。然后可以将带有
ax
关键字的
轴传递到
sns.barplot
。现在的问题是,如果调用
plt.show()
标签可能会被切断,但如果使用
bbox\u 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
,因此在这段代码中有一个假设,
matplotlib
在使用和不使用
pycharm
时表现相同。无论如何,对我来说,结果是这样的:


一种解决方法是将
实例自己创建为轴,而不是子地块。然后
tight\u layout()
没有效果,即使它是在内部调用的。然后可以将带有
ax
关键字的
轴传递到
sns.barplot
。现在的问题是,如果调用
plt.show()
标签可能会被切断,但如果使用
bbox\u 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
,因此在这段代码中有一个假设,
matplotlib
在使用和不使用
pycharm
时表现相同。无论如何,对我来说,结果是这样的:


如果您希望在交互式后端中使用此功能,除了手动调整体形大小外,我没有找到其他方法。这是我使用
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外部运行脚本。

如果您希望在交互式后端中运行此脚本,除了手动调整图形大小,我没有找到任何其他方法。这是我使用
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之外运行脚本。

可能这个答案是同一行,可能会帮助您。。。是PyCharm内部后端调用了
紧密布局
。。。对此不予评论,除了。。。也许不要使用pycharm。也许这个答案是同一句话,可能会帮助你。。。是PyCharm内部后端调用了
紧密布局
。。。对此不予评论,除了。。。也许不要使用pycharm。很好的解决方法!当
xlabel
超过一定长度时,我在子地块网格中获取
imshow()
以使图像占据较大图形的全宽时遇到了问题。这把它修好了。谢谢。很好的解决方法!当
xlabel
超过一定长度时,我在子地块网格中获取
imshow()
以使图像占据较大图形的全宽时遇到了问题。这把它修好了。非常感谢。