Why are my graphs closing when I use the matlab api?

조회 수: 8 (최근 30일)
Josh Cohenour
Josh Cohenour 2017년 6월 19일
댓글: Tianya Duan 2020년 3월 25일
I'm having an issue where I run this code in my matlab python api and the graph closes right after all the assets load onto the graph and can't seem to figure out why, I'll leave an example I found that does exactly what i was saying. Any help would be very much appreciated.
import matlab.engine
eng = matlab.engine.start_matlab()
eng.eval("T = readtable('patients.dat');",nargout=0)
eng.eval("S = table2struct(T,'ToScalar',true);",nargout=0)
eng.eval("disp(S)",nargout=0)
D = eng.workspace["S"]
smoker = matlab.logical(D["Smoker"])
pressure = D["Diastolic"]
pressure.reshape((1,100))
pressure = pressure[0]
smoker.reshape((1,100))
smoker = smoker[0]
sp = [p for (p,s) in zip(pressure,smoker) if s is True]
nsp = [p for (p,s) in zip(pressure,smoker) if s is False]
print(len(sp))
print(len(nsp))
sp = matlab.double(sp)
nsp = matlab.double(nsp)
print(eng.mean(sp))
print(eng.mean(nsp))
sdx = eng.linspace(1.0,34.0,34)
nsdx = eng.linspace(1.0,34.0,66)
eng.figure(nargout=0)
eng.hold("on",nargout=0)
eng.box("on",nargout=0)
eng.scatter(sdx,sp,10,'blue')
h = eng.scatter(nsdx,nsp,10,'red')
h = eng.xlabel("Patient (Anonymized)")
h = eng.ylabel("Diastolic Blood Pressure (mm Hg)")
h = eng.title("Blood Pressure Readings for All Patients")
h = eng.legend("Smokers","Nonsmokers")
x = matlab.double([0,35])
y = matlab.double([89.9,89.9])
h = eng.line(x,y,"Color","blue")
h = eng.text(21.0,88.5,"89.9 (Smoker avg.)","Color","blue")
y = matlab.double([79.4,79.4])
h = eng.line(x,y,"Color","red")
h = eng.text(5.0,81.0,"79.4 (Nonsmoker avg.)","Color","red")code

답변 (1개)

Robert Snoeberger
Robert Snoeberger 2017년 6월 22일
My guess is that MATLAB is exiting when your script finishes. Since you are starting a new MATLAB session, the lifetime of MATLAB is tied to the lifetime of the variable 'eng'. You could consider using a shared MATLAB [1].
  댓글 수: 2
Robert Snoeberger
Robert Snoeberger 2017년 6월 22일
You could also add some code at the end of your script to make Python wait for the figure to be closed. One way might be to loop while the figure handle is valid:
while eng.isvalid(h):
pass
isvalid(h) will return False when the figure is closed.
Tianya Duan
Tianya Duan 2020년 3월 25일
Thank you for your answer, help me a lot.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Graphics Object Programming에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by