3

我正在尝试生成由一些硬编码字符串组成的 word_cloud 的 svg(截至目前,稍后将动态生成这些字符串)。下面是生成 word_cloud 的 Python 代码:

from os import path
from wordcloud import WordCloud
d = path.dirname(__file__)
# Read the whole text.
#text = open(path.join(d, 'test.txt')).read()
mytext = ['hello, hi, ibm, pune, hola']
# Generate a word cloud image
wordcloud = WordCloud().generate(text)
import svgwrite
# Display the generated image:
# the matplotlib way:
import matplotlib.pyplot as plt
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")

现在我不想使用 plt.show(),而是想将 wordcloud 变量传递给 svgwrite 方法,如下所示:

svg_document = svgwrite.Drawing(filename = "test-svgwrite.svg",profile = 'full')
svg_document.add(svg_document.text(wordcloud,
                                        insert = (210, 110)))
svg_document.tostring()
svg_document.save()

然而,这个创建的 SVG 不包含任何 wordcloud,只有文本(如下图所示): 查看截图 here

4

2 回答 2

3

面对一些使用 matplotlib 的问题(尽管它将被保存为“.svg”,它将与 wordcloud 结合使用光栅图形),我想出了另一种方法

wordcloud = WordCloud()
wordcloud.generate_from_frequencies(frequencies=features)
wordcloud_svg = wordcloud.to_svg(embed_font=True)
f = open("filename.svg","w+")
f.write(wordcloud_svg )
f.close()

embed_font 布尔值防止单词重叠。您还可以自由修改 wordcloud_svg 以更改颜色、字体等。它具有类似 xml 的结构(打印出来 :))

于 2020-10-01T14:10:22.540 回答
2

我在想做同样的事情时发现了这一点。我从 svgwrite 得到了相同的结果,最后使用了 matplotlib 的功能。

在 matplotlib 的文档中讨论了更改后端使用的格式。当后端使用 SVG 格式时,绘图可以保存为 .svg

在导入部分:

import matplotlib
matplotlib.use('SVG') #set the backend to SVG
import matplotlib.pyplot as plt

生成 WordCloud 后

fname = "cloud_test"
plt.imshow(wordcloud, interpolation="bilinear") 
plt.axis("off")
fig = plt.gcf() #get current figure
fig.set_size_inches(10,10)  
plt.savefig(fname, dpi=700)

savefig(filename) 自动将其保存为 SVG 格式,因为这是后端设置的内容。

于 2017-08-06T20:21:38.143 回答