Возврат MatplotLib Изображение из сервиса колб | Не работает с богатым форматом - PullRequest
0 голосов
/ 15 мая 2018

Я создал приложение Python, размещенное на Flask и публикующее некоторые изображения, оно работает нормально, когда я публикую обычный график с использованием функции axis.plot, но когда я хочу добавить расширенный текст, лучшее форматирование и т. Д., Тогда оно не выполняет рендеринг. изображение, вот пример воспроизводимого кода

from flask import Flask, request, send_file, Response, make_response
from flask_restful  import Resource, Api
import matplotlib.pyplot as plt
from io import StringIO, BytesIO
import numpy as np
import json
import random
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
import pandas as pd


app = Flask(__name__)
api = Api(app)

app.debug = True

class Graph(Resource):
    def get(self):
        fig = Figure()
        axis = fig.add_subplot(1, 1, 1)

        xs = range(100)
        ys = [random.randint(1, 50) for x in xs]

        axis.plot(xs, ys)
        canvas = FigureCanvas(fig)
        output = BytesIO()
        canvas.print_png(output)
        response = make_response(output.getvalue())
        response.mimetype = 'image/png'
        return response

class PltGraph(Resource):
    def get(self):

        fig = Figure()
        xs = range(100)
        ys = [random.randint(1, 50) for x in xs]
        plt.plot(xs,ys)
        plt.ylabel("Y label")
        plt.xlabel("X label")
        plt.title("x and y")
        canvas = FigureCanvas(fig)
        output = BytesIO()
        canvas.print_png(output)
        response = make_response(output.getvalue())
        response.mimetype = 'image/png'
        print(response)
        return response


api.add_resource(Graph,'/Graph.png')
api.add_resource(PltGraph,'/PltGraph.png')

app.run(host='0.0.0.0', port= 81)

Здесь первый метод 'graph.png' дает результат enter image description here

Но второй метод PtgGraph.png дает пустой результат, пожалуйста, помогите

1 Ответ

0 голосов
/ 19 мая 2018

После большого анализа я обнаружил, что определяем фигуру, например plt.figure (1) , и передача этой фигуры на холсте фигуры после завершения функции графика даст тот же результат, т.е. canvas = FigureCanvas (plt.figure (1))

class PltGraph(Resource):
    def get(self):
        fig = Figure()
        xs = range(100)
        ys = [random.randint(1, 50) for x in xs]
        plt.figure(1)
        plt.plot(xs,ys)
        plt.ylabel("Y label")
        plt.xlabel("X label")
        plt.title("x and y")
        canvas = FigureCanvas(plt.figure(1)) 
        output = BytesIO()
        canvas.print_png(output)
        response = make_response(output.getvalue())
        response.mimetype = 'image/png'
#        print(response)
        return response
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...