Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将python wordcloud元素传递给svgwrite方法以生成wordcloud的svg?_Python_Python 2.7_Svg_Svgwrite - Fatal编程技术网

如何将python wordcloud元素传递给svgwrite方法以生成wordcloud的svg?

如何将python wordcloud元素传递给svgwrite方法以生成wordcloud的svg?,python,python-2.7,svg,svgwrite,Python,Python 2.7,Svg,Svgwrite,我试图生成一个由一些硬编码字符串组成的单词_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,

我试图生成一个由一些硬编码字符串组成的单词_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,只包含文本(如下面的屏幕截图所示):

我在做同样的事情时发现了这个。我从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格式,因为这是后端设置的格式。

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

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()
嵌入字体布尔值防止单词重叠。 您还可以自由修改wordcloud_svg来更改颜色、字体等。它具有类似xml的结构(打印:)