0

我一直在尝试某些 mpld3 情节并提出了疑问。我知道可以使用savefig()函数在本地保存 mpld3 图。我的问题是是否可以提供下载选项,以便将绘图作为图像下载到浏览器本身中。附上代码和截图:

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 绘制文本文件中的文本(附加信息供参考)

剧情截图:

在此处输入图像描述

正如您从屏幕截图中看到的那样,绘图正在运行,flask需要将其转换为图像以供下载。

4

1 回答 1

1

这个 StackOverflow 链接至少可以部分解决这个问题: 将 D3 图表另存为图像

它提到了一个名为 saveSvgAsPng ( https://github.com/exupero/saveSvgAsPng ) 的 GitHub 包,以及如何使用它将 D3 图表转换为 .png 文件。

JavaScript 端的 mpld3 代码基本上采用 mpld3.fig_to_dict() 为 matplotlib 图生成的 JSON 规范,并将其在 DOM 中呈现为 D3 元素(<svg> 和其他嵌套元素)。浏览器中没有存储基于光栅的图像,因此您不能直接从中下载 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有 JavaScript 端 RPC 调用,它调用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 )

于 2018-04-27T22:24:13.433 回答