2015-08-10 2 views
0

Я хочу отобразить изображение, созданное matplotlib в django. У меня есть рабочее решение, но вы хотите сделать это, не записывая на диск. Вот код:отображение графика matplotlib в djangoview

def __get_img_data1(): # not working - returns a white blank image 
    fig = plt.figure() 
    imgdata = StringIO.StringIO() 
    fig.savefig(imgdata, format='png') 
    imgdata.seek(0) 
    content = imgdata.getvalue() 
    imgdata.close() 
    return content 

def __get_img_data2(): # not working - returns a broken image 
    fig = plt.figure() 
    imgdata = StringIO.StringIO() 
    fig.savefig(imgdata, format='png') 
    imgdata.seek(0) 
    from PIL import Image 
    return Image.open(imgdata) 

def __get_img_data3(): # working! 
    img_file = NamedTemporaryFile(delete=False) 
    plt.savefig(img_file.name, dpi=600) 
    img_data = open(img_file.name + '.png', 'rb').read() 
    os.remove(img_file.name) 
    os.remove(img_file.name + '.png') 
    return img_data 

Я принял 3 подхода, описанные выше. Как заставить его работать без записи на диск? Предполагается работать в соответствии с документацией: http://matplotlib.org/faq/howto_faq.html

но оно отображает пустое белое изображение.

ответ

0

Ух, я понял. Проблема в том, что мне нужно было получить объект фигуры до делать мой заговор.

Это работает:

def __get_png_img_buff(fig): 
    buff = StringIO.StringIO() 
    fig.savefig(buff, format='png') 
    buff.seek(0) 
    return buff 
Смежные вопросы