Предоставление возможности загрузки графика mpld3 как изображения в приложении фляги - PullRequest
0 голосов
/ 25 апреля 2018

Я пробовал определенные сюжеты mpld3 и у меня возникло сомнение. Я знаю, что mpld3 графики могут быть сохранены локально, используя функцию savefig(). Мой вопрос заключается в том, можно ли предусмотреть возможность загрузки, чтобы загрузить график в виде изображения в самом браузере. Прилагаемые коды и скриншоты:

ps = PorterStemmer()
stop_words = set(stopwords.words('english'))
file1 = open("test.txt")
line = file1.read()
words = line.split()
appendFile = open('outputFile.txt','w')
for r in words:
    if not r in stop_words:
        appendFile = open('outputFile.txt','a')
        appendFile.write(" "+r)
file=open("outputFile.txt","r+")
D={}
for word in file.read().split():
    if word not in D:
        D[word] = 1
    else:
        D[word] += 1

#print D

fig1=plt1.figure(figsize=(500/96, 400/96))
lists = sorted(D.iteritems(), key=lambda (k,v): (v,k), reverse=True) # sorted by key, return a list of tuples
#print lists
x, y = zip(*lists[:15]) # unpack a list of pairs into two tuples

plt1.title("Top Topics vs Count")
plt1.xlabel('Topics')
plt1.ylabel('Count')

plt1.bar(x, y,align='center',color='#ffd200')
k=sorted(D, key=D.get, reverse=True)
plt1.xticks(range(15), k[:15], fontsize=6)

locs, labels = plt1.xticks()
plt1.setp(labels, rotation=90)

return mpld3.fig_to_html(fig1)

Код выводит текст из текстового файла, используя mpld3 (дополнительная информация для справки)

Снимок экрана:

enter image description here

Как видно из скриншота, сюжет работает на flask, и его необходимо преобразовать в изображение для загрузки.

1 Ответ

0 голосов
/ 28 апреля 2018

Эта ссылка на StackOverflow может хотя бы частично решить вопрос: Сохранить диаграмму D3 как изображение

В нем упоминается пакет GitHub с именем saveSvgAsPng (https://github.com/exupero/saveSvgAsPng) и способ его использования для преобразования диаграмм D3 в файл .png.

Код mpld3 на стороне JavaScript в основном принимает спецификацию JSON, которую mpld3.fig_to_dict () генерирует для графика matplotlib, и отображает его в DOM как элементы D3 ( и другие вложенные элементы). В браузере не хранится растровое изображение, поэтому вы не можете напрямую загрузить png из него. Но такой инструмент, как saveSvgAsPng, может позволить вам преобразовать этот элемент DOM в загружаемый файл .png. Я не знаю, есть ли другие инструменты для PDF, JPEG и т. Д.

У нас есть веб-сайты, которые мы создали, которые позволяют пользователю нажимать на кнопку в браузере, чтобы загрузить рисунки, но они работают так, как сообщают код Python на стороне сервера (через удаленный доступ на основе HTTP). вызов процедуры) для пересчета рисунка и сохранения файла на сервере для загрузки. Таким образом, сервер отображает график, который, я полагаю, может быть лучшим вариантом, если вы хотите, чтобы ваши сохраненные файлы графиков выглядели как исходные рисунки matplotlib, а не как их переводы / аппроксимации D3. (На одном из наших сайтов https://github.com/optimamodel/optima/blob/develop/client/source/js/modules/charts/charts.js#L218 имеет RPC-вызов на стороне JavaScript, который вызывает https://github.com/optimamodel/optima/blob/develop/client/source/js/modules/common/rpc-service.js#L74, и следующий код сервера RPC Python в конечном итоге называется: https://github.com/optimamodel/optima/blob/develop/server/webapp/dataio.py#L1103)

...