【成功解决】在pycharm使用matplotlib绘图无法在SciView显示!Error: failed to send plot to http://127.0.0.1:63342

**用matplotlib绘图,在spyder上运行一切正常。
但是在PyCharm和VS Code上运行,则出现了错误!

**主要错误是:

Error: failed to send plot to http://127.0.0.1:63342
ConnectionAbortedError: [WinError 10053] 你的主机中的软件中止了一个已建立的连接。****

Error: failed to send plot to http://127.0.0.1:63342
Traceback (most recent call last):
  File "D:\JetBrains\PyCharm 2020.3\plugins\python\helpers\pycharm_display\datalore\display\display_.py", line 60, in _send_display_message
    urlopen(url, buffer)
  File "D:\anaconda3\lib\urllib\request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "D:\anaconda3\lib\urllib\request.py", line 525, in open
    response = self._open(req, data)
  File "D:\anaconda3\lib\urllib\request.py", line 543, in _open
    '_open', req)
  File "D:\anaconda3\lib\urllib\request.py", line 503, in _call_chain
    result = func(*args)
  File "D:\anaconda3\lib\urllib\request.py", line 1347, in http_open
    return self.do_open(http.client.HTTPConnection, req)
  File "D:\anaconda3\lib\urllib\request.py", line 1322, in do_open
    r = h.getresponse()
  File "D:\anaconda3\lib\http\client.py", line 1344, in getresponse
    response.begin()
  File "D:\anaconda3\lib\http\client.py", line 306, in begin
    version, status, reason = self._read_status()
  File "D:\anaconda3\lib\http\client.py", line 267, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  File "D:\anaconda3\lib\socket.py", line 589, in readinto
    return self._sock.recv_into(b)
ConnectionAbortedError: [WinError 10053] 你的主机中的软件中止了一个已建立的连接。

在网上了找遍了能找到的资料和各种回答,但没有一个能够解决的!

经过测试,证实:

  1. 设置防火墙无效;
  2. 设置代理无效;
  3. 其他措施……无效!

至于为什么要用SciView显示图片,那是因为用fig窗口显示的图片,其位置和大小,都是不准确的,尤其是text()函数加上的内容。

此外,测试发现:

1.在fig窗口,图片可以显示,但是上述问题无法解决。

2.改变画布的大小,比如:

fig = plt.figure(figsize = (12,9),dpi=300)

可以显示图片,但是只要画布宽和高的数值稍大,如:

fig = plt.figure(figsize = (30,25),dpi=300)

则出现错误:

Error: failed to send plot to http://127.0.0.1:63342

猜测原因:

  • 1.matplotlib生成的图片太大,无法通过SciView的显示机制(我不明白它的显示图片原理是什么)。

  • 2.pycharm的问题,或者与异步通讯库 asyncio有关。

后续进展


随着对Pycharm的日益了解,觉得极大概率原因是:其他的进程或应用,占用了 http://127.0.0.1:63342 这个端口。因而导致错误。
此外,我已经放弃在Pycharm使用matplotlib来绘图。因为其真真解决不了图片的文字、线条等对象显示错乱和不准确的问题。而且SciView只有专业版才能使用,目前也没有购买的必要。

最主要的是,spyder可以完美显示matplotlib的绘图效果。spyder升级到4.2的版本后,也越来越好用了!

问题追踪

2021年4月28日,成功解决matplotlib绘图显示不准确的问题!

随着对python各方面的日益了解,我终于想到了一个办法,用以绕过这个错误。
那就是保存matplotlib绘制的图片到本地,然后再自动打开。
此处需要用到os模块,用来自动打开系统的文件:

import os
# 保存并打开文件
file_name = f'{year}年{month}月{day}日{gegu[:6]}分析.jpg'
# 保存绘图为Jpg的图片格式
plt.savefig(file_name, bbox_inches='tight')
# 用os模块自动打开刚才保存的图片
# start:为了防止阻塞代码运行
os.system(f'start {file_name}')  

这里需要注意的是,start 不能少,否则代码运行到了这里,就不会继续往下运行了,直到手动关闭打开的文件后,才能继续往下运行。

成功且正确地显示了图片:
【成功解决】在pycharm使用matplotlib绘图无法在SciView显示!Error: failed to send plot to http://127.0.0.1:63342_第1张图片
我一直致力于以交易为生,目前全职交易,兼职写作和设计,欢迎同道者一起讨论交易的相关问题。

你可能感兴趣的:(pthon疑难记录,python,matplotlib)