我尝试在Qt5应用程序中使用Matplotlib,并希望使用矩形选择器,但根据参数useblit
,我要么遇到图形问题,要么选择器消失。你知道吗
然而,当选择时,我得到一个奇怪的图形故障,整个情节似乎移动到左上角,留下1厘米的底部和右侧黑色(或透明,如我的截图所示)。这里发生了什么?你知道吗
这将打开一个带有绘图和一些随机数据的Qt5窗口。一旦你选择了一些数据,它将清除轴并绘制一些新的东西。你知道吗
如果我们设置useblit=False
,矩形选择器在第一个ax.clear()
之后消失,如果我们有useblit=True
,我们在选择时在底部和右侧得到大约1厘米的黑色(见图)。你知道吗
import sys
import matplotlib
import random
matplotlib.use('Qt5Agg')
from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
#from matplotlib.widgets import SpanSelector
from matplotlib.widgets import RectangleSelector
class Window(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.figure = Figure()
self.ax = self.figure.add_subplot(111)
self.canvas = FigureCanvas(self.figure)
# First data
self.ax.plot([random.random() for _ in range(50)])
# Embedding plot into Qt
layout = QVBoxLayout()
layout.addWidget(self.canvas)
self.setLayout(layout)
self.x = RectangleSelector(self.ax, self.onselect_xy,
drawtype='box',
useblit=False, # or True?
rectprops={'alpha':0.5, 'facecolor':'red'},
interactive=True)
self.canvas.draw()
def onselect_xy(self, *args, **kwargs):
self.ax.clear()
self.ax.plot([random.random() for _ in range(50)])
self.canvas.draw()
if __name__ == '__main__':
app = QApplication(sys.argv)
main = Window()
main.show()
sys.exit(app.exec_())
在macOS 10.13.6 HighSierra上,从conda list
中选择:
python 3.7.1 haf84260_7
pyside2 5.6.0a1 py37h45ccf91_3 conda-forge
matplotlib 3.0.2 py37h54f8f79_0
问题似乎是PySide2的旧版本,最新版本工作正常。另一方面,conda不允许使用最新版本的PySide2,因此您必须使用virtualenv并用pip安装包。你知道吗
相关问题 更多 >
编程相关推荐