使用plt.show()在pycharm中出现兼容性错误

时间:2018-06-30 02:22:11

标签: python matplotlib pycharm spyder

我想根据pycharm中的以下代码绘制pca组件图。

import numpy as np
import matplotlib.pyplot as plt

from sklearn import linear_model, decomposition, datasets
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV

logistic = linear_model.LogisticRegression()

pca = decomposition.PCA()
pipe = Pipeline(steps = [('pca',pca), ('logistic', logistic)])

digits = datasets.load_digits()
x_digits = digits.data
y_digits = digits.target

# plot pca spectrum
pca.fit(x_digits)

plt.figure(1, figsize=(4,3))
# clear the current figure
plt.clf()
# add axes
plt.axes([.2,.2,.7,.7])
plt.plot(pca.explained_variance_, linewidth = 2)

plt.xlabel('n_components')
plt.ylabel('explained_variance_')

# prediction
n_comp = [20, 40, 64]
# logspace default is base 10, this is 10^-4 to 10^4
cs = np.logspace(-4, 4, 3)

# parameters of pipelines can be set using '__' separated parameter names:
estimator = GridSearchCV(pipe,
                         dict(pca__n_components = n_comp,
                              logistic__C = cs))
estimator.fit(x_digits, y_digits)

plt.axvline(estimator.best_estimator_.named_steps['pca'].n_components,
            linestyle = ':',label = 'n_compoenents chosen')
plt.legend(prop = dict(size = 12))
plt.axis('tight')
plt.show()

但是我收到一条错误消息:

UserWarning: This figure includes Axes that are not compatible with tight_layout, so its results might be incorrect.warnings.warn("This figure includes Axes that are not "

  File "C:\Program Files\JetBrains\PyCharm 2018.1.1\helpers\pycharm_matplotlib_backend\backend_interagg.py", line 25, in __call__
    manager.show(**kwargs)
  File "C:\Program Files\JetBrains\PyCharm 2018.1.1\helpers\pycharm_matplotlib_backend\backend_interagg.py", line 107, in show
    self.canvas.show()
  File "C:\Program Files\JetBrains\PyCharm 2018.1.1\helpers\pycharm_matplotlib_backend\backend_interagg.py", line 62, in show
    self.figure.tight_layout()
  File "C:\Users\User\Anaconda3\lib\site-packages\matplotlib\figure.py", line 1752, in tight_layout
    rect=rect)
  File "C:\Users\User\Anaconda3\lib\site-packages\matplotlib\tight_layout.py", line 322, in get_tight_layout_figure
    max_nrows = max(nrows_list)
  ValueError: max() arg is an empty sequence

我在spyder中尝试了相同的代码,但工作却很惊讶。

pycharm plot设置有什么问题? spyder和pycharm都使用python 3.5。

2 个答案:

答案 0 :(得分:2)

快速解决方案:在Pycharm中禁用Python Scientific绘图窗口(然后它将使用默认的matplotlib后端)

File > Settings > Tools >  Python > show plots in tool window

答案 1 :(得分:0)

我的解决方案是尝试使用此代码plt.savefig('pic.png',bbox_inches='tight'),而不是使用plt.show()