python - 导出 svg 文件时,Plotly 无法访问 orca 服务器
问题描述
我正在尝试将绘图直方图导出到 svg 文件。在我尝试处理大量数据点之前,这很好用。下面的代码适用于 1000000 个模拟数据点,但会中断 10000000 个点。
import plotly.graph_objs as go
import plotly.io as pio
import numpy as np
# simulate small input data: this works
# data_1 = list(np.random.randint(0, 2**63, 1_000_000))
# data_2 = list(np.random.randint(0, 2**63, 1_000_000))
# simulate larger input data: this works
data_1 = list(np.random.randint(0, 2**63, 10_000_000))
data_2 = list(np.random.randint(0, 2**63, 10_000_000))
# assemble two histograms and plot them into one figure
g1 = go.Histogram(x=data_1, opacity=0.75)
g2 = go.Histogram(x=data_2, opacity=0.75)
data = [g1, g2]
figure = go.Figure(data=data)
# write the plot as html, this works
plotly.offline.plot(figure, auto_open=True, filename="/tmp/foo.html")
# writing the plot as svg (or png) file doesn't work
pio.write_image(figure, "/tmp/foo.svg")
如果使用 10000000 个模拟数据点运行,我会收到以下错误消息(下面的完整堆栈跟踪):
ValueError:
For some reason plotly.py was unable to communicate with the
local orca server process, even though the server process seems to be running.
问题是:使用我的真实数据集,我不能简单地减少点数。有谁知道,这里发生了什么以及如何解决这个问题?
它看起来有点像 orca 服务器超时,因为计算时间太长,但服务器的超时持续时间(默认情况下)设置为None
即无超时。我还尝试更改服务器的端口(如此处所建议),但这并没有帮助。
附加信息
我正在使用 plotly 3.3.0 和 orca 1.1.1。我的 orca 配置 ( print(pio.orca.config)
) 如下所示:
orca configuration
------------------
executable: orca
port: None
timeout: None
default_width: None
default_height: None
default_scale: 1
default_format: png
mathjax: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js
topojson: None
mapbox_access_token: None
constants
---------
plotlyjs: /home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/plotly/package_data/plotly.min.js
config_file: /home/m00am/.plotly/.orca
完整的堆栈跟踪
Traceback (most recent call last):
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 600, in urlopen
chunked=chunked)
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 356, in _make_request
conn.request(method, url, **httplib_request_kw)
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/http/client.py", line 1239, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/http/client.py", line 1285, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/http/client.py", line 1234, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/http/client.py", line 1065, in _send_output
self.send(chunk)
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/http/client.py", line 986, in send
self.sock.sendall(data)
ConnectionResetError: [Errno 104] Connection reset by peer
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/requests/adapters.py", line 423, in send
timeout=timeout
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 649, in urlopen
_stacktrace=sys.exc_info()[2])
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/requests/packages/urllib3/util/retry.py", line 347, in increment
raise six.reraise(type(error), error, _stacktrace)
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/requests/packages/urllib3/packages/six.py", line 685, in reraise
raise value.with_traceback(tb)
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 600, in urlopen
chunked=chunked)
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 356, in _make_request
conn.request(method, url, **httplib_request_kw)
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/http/client.py", line 1239, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/http/client.py", line 1285, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/http/client.py", line 1234, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/http/client.py", line 1065, in _send_output
self.send(chunk)
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/http/client.py", line 986, in send
self.sock.sendall(data)
requests.packages.urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/plotly/io/_orca.py", line 1305, in to_image
height=height)
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/retrying.py", line 49, in wrapped_f
return Retrying(*dargs, **dkw).call(f, *args, **kw)
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/retrying.py", line 212, in call
raise attempt.get()
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/retrying.py", line 247, in get
six.reraise(self.value[0], self.value[1], self.value[2])
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/six.py", line 693, in reraise
raise value
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/retrying.py", line 200, in call
attempt = Attempt(fn(*args, **kwargs), attempt_number, False)
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/plotly/io/_orca.py", line 1201, in request_image_with_retrying
response = requests.post(server_url + '/', data=json_str)
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/requests/api.py", line 110, in post
return request('post', url, data=data, json=json, **kwargs)
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/requests/api.py", line 56, in request
return session.request(method=method, url=url, **kwargs)
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/requests/sessions.py", line 488, in request
resp = self.send(prep, **send_kwargs)
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/requests/sessions.py", line 609, in send
r = adapter.send(request, **kwargs)
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/requests/adapters.py", line 473, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "bar.py", line 107, in <module>
distribution_comparison()
File "bar.py", line 97, in distribution_comparison
pio.write_image(figure, "/tmp/foo.png")
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/plotly/io/_orca.py", line 1492, in write_image
validate=validate)
File "/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/plotly/io/_orca.py", line 1322, in to_image
""".format(info=status_str))
ValueError:
For some reason plotly.py was unable to communicate with the
local orca server process, even though the server process seems to be running.
Please review the process and connection information below:
orca status
-----------
state: running
executable: /home/m00am/miniconda3/envs/my_conda_env/bin/orca
version: 1.1.1
port: 40887
pid: 3277
command: ['/home/m00am/miniconda3/envs/my_conda_env/bin/orca', 'serve', '-p', '40887', '--plotly', '/home/m00am/miniconda3/envs/my_conda_env/lib/python3.6/site-packages/plotly/package_data/plotly.min.js', '--graph-only', '--mathjax', 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js']
解决方案
这看起来像一个超时问题,不幸的timeout
是orca的配置中的参数与请求超时无关,这似乎是在服务器源中硬编码的。您可以尝试构建更大的 orcarequestTimeout
或在 repo 中提交问题。
推荐阅读
- arrays - 如何在 C 中创建带有结构元素的数组?
- python - 为什么我的路径与 A Star 算法中的启发式函数方向相反?
- java - 如何为我的 Bukkit 插件使用 API?
- outlook - 如何启动 Outlook 模板文件?
- android - 无法在 Visual Studio 上修复服务器 Socket Flutter Dart
- r - 根据另一个 df 中的值添加动态标题以进行绘图
- c# - 在net core 3.1 mvc中添加多个标签以形成
- sql-server-2016 - SQL Server 2016 时态表为空白
- javascript - 将 svg 元素导出到 svg 文件以剪切图像结尾
- node.js - Mongoose 按条件查找,否则查找所有 ($or)