【问题标题】:Providing an option to download mpld3 plot as image in flask app提供在烧瓶应用程序中下载 mpld3 图作为图像的选项
【发布时间】:2018-04-25 09:05:26
【问题描述】:

我一直在尝试某些 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 上运行,需要将其转换为图片以供下载。

【问题讨论】:

    标签: python matplotlib flask mpld3


    【解决方案1】:

    这个 StackOverflow 链接至少可以部分解决这个问题: Save D3 chart as image

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

    JavaScript 端的 mpld3 代码基本上采用 mpld3.fig_to_dict() 为 matplotlib 图生成的 JSON 规范,并将其在 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 有 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-20
      • 1970-01-01
      • 2018-10-02
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多