2017-10-27 11 views
0

でsympyプロットをプロットする)。これはPythonで働くプロットのデモsympyコードです http://host:port/app/controller/myplot4.pngは、私は(web2pyの機能myplot4を書き込むことにより、web2pyの中sympyプロットをプロットしたいのweb2py

を使用してそれを呼び出しますシェル。

from sympy import symbols 
from sympy.plotting import plot 
x = symbols('x') 
p1 = plot(x*x) 
p2 = plot(x) 
p1.append(p2[0]) 
p1 

私はこのレシピは正常に動作しますが、sympyインポートがプロット機能

ある中で誰かがどのようにプロットするために同様の機能を記述するために私に言うことができるのに対し、それはFigureCanvasAggと図をインポートhttp://www.web2pyslices.com/slice/show/1357/matplotlib-howto

でレシピを見つけましたsympyのweb2pyのプロット

from matplotlib.backends.backend_agg 
import FigureCanvasAgg as FigureCanvas 
from matplotlib.figure import Figure 
def pcolor2d(title='title',xlab='x',ylab='y', 
     z=[[1,2,3,4],[2,3,4,5],[3,4,5,6],[4,5,6,7]]): 
    fig=Figure() 
    fig.set_facecolor('white') 
    ax=fig.add_subplot(111) 
    if title: ax.set_title(title) 
    if xlab: ax.set_xlabel(xlab) 
    if ylab: ax.set_ylabel(ylab) 
    image=ax.imshow(z) 
    image.set_interpolation('bilinear') 
    canvas=FigureCanvas(fig) 
    stream=cStringIO.StringIO() 
    canvas.print_png(stream) 
    return stream.getvalue() 

は、次のような行動をしてみてください(そうでないか)このレシピに基づいて:

def myplot2(): 
    response.headers['Content-Type']='image/png' 
    return pcolor2dt(z=[[1,2,3,4],[2,3,4,5],[3,4,5,6],[4,5,6,7]]) 

http://host:port/app/controller/myplot2.png

答えて

0

でそれらを呼び出すには、私が実験により答えを発見し、それは簡単です。

def plot_sympy(): 
    from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas 
    from matplotlib.figure import Figure 
    import io 
    from sympy import symbols 
    from sympy.plotting import plot 
    x = symbols('x') 
    p1 = plot(x*x) 
    p2 = plot(x) 
    p1.append(p2[0]) 
    s = io.BytesIO() 
    p1.save(s) 
    fig=Figure() 
    canvas=FigureCanvas(fig) 
    canvas.print_tif(s) 
    return s.getvalue() 
def myplot4(): 
    response.headers['Content-Type']='image/png' 
    return plot_sympy()