如何使用matplotlib绘制应力函数图?

时间:2016-05-15 20:39:04

标签: python matplotlib pyqt

大家好! 我是python和PyQT的新手。 我想用这个公式计算应力张量分量

Stress tensor component

其中lambda,mu和alpha - 是常数,T - 是温度的变化。

然后使用matplotlib绘制它,x轴上的温度变化,以及y轴上的应力变化。

我在QT Designer中创建了一个带有三个按钮的GUI,用于计算不同的材料。到目前为止,我只能在某个温度点计算应力。

但现在我一直坚持策划,因为我从未使用matlib进行策划,我希望你能帮助我。

import sys
from PyQt4 import QtCore, QtGui, uic


qtCreatorFile = "Application.ui"

Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)

class MyApp(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self):
    QtGui.QMainWindow.__init__(self)
    Ui_MainWindow.__init__(self)
    self.setupUi(self)
    self.clcbtn.clicked.connect(self.CalculateStress)
    self.clcbtn_2.clicked.connect(self.CalculateStress1)
    self.clcbtn_3.clicked.connect(self.CalculateStress2)


def CalculateStress(self):
   t = int(self.textEdit.toPlainText())
   lam = 55500000000
   theta = 10
   mu = 26100000000
   alpha = 0.0000222
   str11 = 3
   total_stress = lam * theta + 2 * mu * str11 - (3 * lam + 2 * mu) * alpha * t
   total_stress_string = "The total stress is: " + str(total_stress)
   self.results_window.setText(total_stress_string)


def CalculateStress1(self):
   t = int(self.textEdit.toPlainText())
   lam = 104400000000
   theta = 10
   mu = 82000000000
   alpha = 0.000013
   str11 = 5
   total_stress1 = lam * theta + 2 * mu * str11 - (3 * lam + 2 * mu) * alpha * t
   total_stress_string = "The total stress is: " + str(total_stress1)
   self.results_window.setText(total_stress_string)

def CalculateStress2(self):
   t = int(self.textEdit.toPlainText())
   lam = 5450000000
   theta = 10
   mu = 1480000000
   alpha = 0.0000702
   str11 = 3
   total_stress2 = lam * theta + 2 * mu * str11 - (3 * lam + 2 * mu) * alpha * t
   total_stress_string = "The total stress is: " + str(total_stress2)
   self.results_window.setText(total_stress_string)


if __name__ == "__main__":

app = QtGui.QApplication(sys.argv)
window = MyApp()
window.show()
sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:0)

您需要一个带有FigureCanvas的小部件才能这样做。我可以分享我的自定义QWidget,它基于matloplib reference

中的示例
class MplCanvas(FigureCanvas):
    """Represents a canvas in QtGui.QWidget"""

    def __init__(self):
        self.fig = Figure()
        FigureCanvas.__init__(self, self.fig)

        FigureCanvas.setSizePolicy(self,
                                   QtGui.QSizePolicy.Expanding,
                                   QtGui.QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self)


class MplWidget(QtGui.QWidget):
    """Represents a customized Matplotlib QWidget"""

    def __init__(self):      
        QtGui.QWidget.__init__(self)
        self.canvas = MplCanvas()
        self.axes = self.canvas.fig.add_subplot(1, 1, 1)
        layout = QtGui.QVBoxLayout(self)       
        layout.addWidget(self.canvas)

    def draw_array(self, label, a):
        line, = self.axes.plot(a[:,0], a[:,1], label=label)
        self.axes.legend()
        self.resize_subplot(self.axes)
        self.canvas.draw()

您可以使用myMplWidget = MplWidget()创建一个实例,将其添加到布局中,或在QMainWindow setCentralWidget(myMplWidget)中将其用作centralWidget并使用myMplWidget.draw_array("My array", arr),假设为{{ 1}}是一个二维数组

如果您未能使代码正常运行,请及时通知我。我为此答案修改了它,并没有测试修改