**用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] 你的主机中的软件中止了一个已建立的连接。
在网上了找遍了能找到的资料和各种回答,但没有一个能够解决的!
经过测试,证实:
至于为什么要用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 不能少,否则代码运行到了这里,就不会继续往下运行了,直到手动关闭打开的文件后,才能继续往下运行。