有没有什么办法可以像matplotlib一样使用plotly,也就是使绘图显示在弹出窗口中?例如,是否有一个简单的等价物
plt.plot([1,2,3], [2, 3, 2.5])
plt.show()
我尝试了各种功能,但是它们似乎都创建了html文件或图像文件。
答案 0 :(得分:4)
您可以在默认的系统图像查看器中打开由plotly创建的图像,这是一个独立的窗口。
import numpy as np
import plotly.graph_objs as go
fig = go.Figure()
fig.add_scatter(x=np.random.rand(100), y=np.random.rand(100), mode='markers',
marker={'size': 30, 'color': np.random.rand(100), 'opacity': 0.6,
'colorscale': 'Viridis'});
def show(fig):
import io
import plotly.io as pio
from PIL import Image
buf = io.BytesIO()
pio.write_image(fig, buf)
img = Image.open(buf)
img.show()
show(fig)
当然,这样做的缺点是您没有任何交互。
另一种选择是创建一个Web浏览器窗口,以显示plotly生成的html页面。为此,您需要使用允许创建浏览器的GUI工具包。 PyQt5就是一个。
因此,以下代码使用浏览器创建了一个PyQt5窗口,并加载了在其中内部绘制的html页面,以便您与之交互。 (此版本已在pyqt 5.9上进行了测试,可能无法在较旧的版本上使用。)
import numpy as np
import plotly.graph_objs as go
fig = go.Figure()
fig.add_scatter(x=np.random.rand(100), y=np.random.rand(100), mode='markers',
marker={'size': 30, 'color': np.random.rand(100), 'opacity': 0.6,
'colorscale': 'Viridis'});
def show_in_window(fig):
import sys, os
import plotly.offline
from PyQt5.QtCore import QUrl
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtWidgets import QApplication
plotly.offline.plot(fig, filename='name.html', auto_open=False)
app = QApplication(sys.argv)
web = QWebEngineView()
file_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "name.html"))
web.load(QUrl.fromLocalFile(file_path))
web.show()
sys.exit(app.exec_())
show_in_window(fig)
答案 1 :(得分:1)
这是一个由ImportanceOfBeingErnest的答案构成的独立类,以防万一有人需要
import numpy as np
import plotly.graph_objs as go
import plotly.offline
fig = go.Figure()
fig.add_scatter(x=np.random.rand(100), y=np.random.rand(100), mode='markers',
marker={'size': 30, 'color': np.random.rand(100), 'opacity': 0.6,
'colorscale': 'Viridis'});
import os, sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl
from PyQt5 import QtWebEngineWidgets
class PlotlyViewer(QtWebEngineWidgets.QWebEngineView):
def __init__(self, fig, exec=True):
# Create a QApplication instance or use the existing one if it exists
self.app = QApplication.instance() if QApplication.instance() else QApplication(sys.argv)
super().__init__()
self.file_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "temp.html"))
plotly.offline.plot(fig, filename=self.file_path, auto_open=False)
self.load(QUrl.fromLocalFile(self.file_path))
self.setWindowTitle("Plotly Viewer")
self.show()
if exec:
self.app.exec_()
def closeEvent(self, event):
os.remove(self.file_path)
win = PlotlyViewer(fig)
答案 2 :(得分:0)
这应该很简单
import plotly.io as pio
pio.renderers.default = "browser"