3 votes

Comment passer un élément wordcloud python à la méthode svgwrite pour générer un svg du wordcloud ?

J'essaie de générer un svg du nuage de mots formé à partir de certaines chaînes codées en dur (pour l'instant, ces chaînes seront générées dynamiquement par la suite). Voici le code Python pour générer le word_cloud :

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")

Maintenant, au lieu d'utiliser plt.show(), je veux passer la variable wordcloud à la méthode svgwrite comme ci-dessous :

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()

Cependant, le SVG créé ne contient pas de nuage de mots, seulement le texte (voir la capture d'écran ci-dessous) : voir la capture d'écran ici

2voto

delleae Points 11

J'ai trouvé ceci en cherchant à faire exactement la même chose. J'ai obtenu les mêmes résultats avec svgwrite et j'ai fini par utiliser les fonctionnalités de matplotlib à la place.

Dans la page d'accueil de matplotlib la documentation il est question de modifier le format utilisé par le backend. Lorsque le backend utilise le format SVG, le tracé peut être sauvegardé au format .svg

Dans la section des importations :

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

Après avoir généré le 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) l'enregistre automatiquement au format SVG, puisque c'est le format utilisé par le backend.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X