我一直在尝试某些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
上运行,需要将其转换为图像以供下载。
答案 0 :(得分:0)
此StackOverflow链接可能至少部分解决了以下问题: Save D3 chart as image
它提到了一个名为saveSvgAsPng(https://github.com/exupero/saveSvgAsPng)的GitHub包,以及如何使用它将D3图表转换为.png文件。
JavaScript端mpld3代码基本上采用mpld3.fig_to_dict()为matplotlib图生成的JSON规范,并将其作为D3元素(< svg>和其他嵌套元素)呈现在DOM中。浏览器中没有存储基于栅格的图像,因此您无法直接从此处下载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端调用,调用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)