如何解决如何避免显示matplotlib大于2 ^ 16像素?
我正在尝试在matplotlib图形中显示大量信号。我的界面中有一个值来设置信号之间的间距。我的问题是,如果该值太大,则会出现此错误:
ValueError:1266x121000像素的图像大小太大。每个方向上的距离都必须小于2 ^ 16。
和软崩溃。我想做的是避免软件崩溃。是否存在一种方法来检测是否会发生该错误,然后告知用户该值太大?我也可以将dpi调整为较大的数字,但无论如何仍然会出现错误。
这里是一个最小的示例:
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys
import numpy as np
import matplotlib
matplotlib.use('Qt5Agg')
import matplotlib.pyplot as plt
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
class Mon_Graph(QMainWindow):
def __init__(self,parent=None):
super(Mon_Graph,self).__init__()
self.parent = parent
self.centralWidget = QWidget()
self.setCentralWidget(self.centralWidget)
self.mainHBOX = QHBoxLayout()
self.spacing_e = QLineEdit('1')
self.mainHBOX.addWidget(self.spacing_e)
self.graph= graphic(self)
self.mainHBOX.addWidget(self.graph)
self.centralWidget.setLayout(self.mainHBOX)
self.Sigs = np.random.rand(100,100)*10
self.spacing_e.editingFinished.connect(self.update_sigs)
def update_sigs(self):
self.graph.update()
class graphic(QGraphicsView):
def __init__(self,parent=None):
super(graphic,self).__init__(parent)
self.parent = parent
self.scene = QGraphicsScene(self)
self.setScene(self.scene)
self.figure = plt.figure(facecolor='white')
self.canvas = FigureCanvas(self.figure)
self.widget = QWidget()
self.widget.setLayout(QVBoxLayout())
self.scroll = QScrollArea(self.widget)
self.scroll.setWidget(self.canvas)
self.axes = self.figure.add_subplot(111)
self.axes.set_xlabel("Time (s)")
layout = QVBoxLayout()
layout.addWidget(self.scroll)
self.setLayout(layout)
def update(self):
Sigs = self.parent.Sigs
self.figure.clear()
plt.figure(self.figure.number)
plt.subplots_adjust(left=0.1,bottom=0.01,right=1,top=1,wspace=0.0,hspace=0.0 )
self.axes = plt.subplot(1,1,1)
spacing = float(self.parent.spacing_e.text())
for i in range(Sigs.shape[0]):
plt.plot(Sigs[i,:]+i*spacing)
self.axes.autoscale(enable=True,axis='both',tight=True)
self.canvas.setGeometry(0,self.parent.width()-100,(self.parent.height()-100)*spacing)
self.canvas.draw_idle()
def main():
app = QApplication(sys.argv)
app.setStyle('Windows')
ex = Mon_Graph(app)
ex.showMaximized()
sys.exit(app.exec())
if __name__ == '__main__':
main()
如果我在lineedit中输入20,就可以了,但是如果我输入200,它会因先前的错误而崩溃。
解决方法
只需在您的更新方法中添加一个条件,以检查Sigs
的两个维度是否都超过2 ^ 16(在调用plot
之前)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。