Python 使用cStringIO在CGI中显示matplotlib绘图

Python 使用cStringIO在CGI中显示matplotlib绘图,python,string,image,matplotlib,cgi,Python,String,Image,Matplotlib,Cgi,正在尝试将简单绘图(保存在StringIO中)返回到web浏览器。经过几个小时的阅读,也许终于接近了 import cgi import cStringIO import matplotlib.pyplot as plt import numpy as np def doit(): x = np.linspace(-2,2,100) y = np.sin(x) format = "png" ggg = cStringIO.StringIO() p

正在尝试将简单绘图(保存在StringIO中)返回到web浏览器。经过几个小时的阅读,也许终于接近了

import cgi
import cStringIO
import matplotlib.pyplot as plt
import numpy as np


def doit():

    x = np.linspace(-2,2,100)
    y = np.sin(x)

    format = "png"
    ggg = cStringIO.StringIO()

    plt.plot(x, y)
    plt.savefig(ggg, format=format)

    data_uri = ggg.read().encode('base64').replace('\n', '')
    img_tag = '<img src="data:image/png;base64,{0}" alt="thisistheplot"/>'.format(data_uri)

    print("Content-type: text/html\n")
    print("<title>Try Ageen</title>")
    print("<h1>Hi</h1>")
    print(img_tag)

doit()
导入cgi
导入cStringIO
将matplotlib.pyplot作为plt导入
将numpy作为np导入
def doit():
x=np.linspace(-2,2100)
y=np.sin(x)
format=“png”
ggg=cStringIO.StringIO()
平面图(x,y)
plt.savefig(ggg,格式=格式)
data_uri=ggg.read().encode('base64').replace('\n','')
img_标记=“”.format(数据uri)
打印(“内容类型:text/html\n”)
打印(“试用年龄”)
打印(“Hi”)
打印(img_标签)
doit()

它返回一个损坏的图像图标。我已经看过这篇文章了:,除其他外…

事实上,我刚刚找到了答案。将离开张贴,因为我还没有看到采取这种方法,并希望它可以帮助:

#!/usr/bin/env python
import cgi
import cStringIO
import matplotlib.pyplot as plt
import numpy as np


def doit():

    x = np.linspace(-2,2,100)
    y = np.sin(x)
    format = "png"
    sio = cStringIO.StringIO()
    plt.plot(x, y)
    plt.savefig(sio, format=format)

    data_uri = sio.getvalue().encode('base64').replace('\n', '')
    img_tag = '<img src="data:image/png;base64,{0}" alt="sucka" />'.format(data_uri)

    print("Content-type: text/html\n")
    print("<title>Try Ageen</title>")
    print("<h1>Hi</h1>")
    print(img_tag)

doit()
#/usr/bin/env python
导入cgi
导入cStringIO
将matplotlib.pyplot作为plt导入
将numpy作为np导入
def doit():
x=np.linspace(-2,2100)
y=np.sin(x)
format=“png”
sio=cStringIO.StringIO()
平面图(x,y)
plt.savefig(sio,格式=格式)
data_uri=sio.getvalue().encode('base64').replace('\n','')
img_标记=“”.format(数据uri)
打印(“内容类型:text/html\n”)
打印(“试用年龄”)
打印(“Hi”)
打印(img_标签)
doit()

目标是让客户端输入三角函数,并在后续页面上返回。仍然欢迎任何有助于此代码执行/外观更好的注释。

事实上,刚刚解决了这个问题。将离开张贴,因为我还没有看到采取这种方法,并希望它可以帮助:

#!/usr/bin/env python
import cgi
import cStringIO
import matplotlib.pyplot as plt
import numpy as np


def doit():

    x = np.linspace(-2,2,100)
    y = np.sin(x)
    format = "png"
    sio = cStringIO.StringIO()
    plt.plot(x, y)
    plt.savefig(sio, format=format)

    data_uri = sio.getvalue().encode('base64').replace('\n', '')
    img_tag = '<img src="data:image/png;base64,{0}" alt="sucka" />'.format(data_uri)

    print("Content-type: text/html\n")
    print("<title>Try Ageen</title>")
    print("<h1>Hi</h1>")
    print(img_tag)

doit()
#/usr/bin/env python
导入cgi
导入cStringIO
将matplotlib.pyplot作为plt导入
将numpy作为np导入
def doit():
x=np.linspace(-2,2100)
y=np.sin(x)
format=“png”
sio=cStringIO.StringIO()
平面图(x,y)
plt.savefig(sio,格式=格式)
data_uri=sio.getvalue().encode('base64').replace('\n','')
img_标记=“”.format(数据uri)
打印(“内容类型:text/html\n”)
打印(“试用年龄”)
打印(“Hi”)
打印(img_标签)
doit()
目标是让客户端输入三角函数,并在后续页面上返回。仍然欢迎任何有助于此代码性能/外观更好的注释