You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python wordcloud库导出SVG词云为栅格格式,如何获取矢量版本?

你当前输出的SVG是嵌入了栅格位图的伪矢量文件,原因是wordcloud库默认生成的是PIL栅格图像对象,调用plt.imshow()绘图时,matplotlib会直接把位图嵌入到导出的SVG中,不是真正的矢量文本。

解决方案

我们可以直接读取wordcloud生成的文本布局属性,手动生成纯矢量SVG文件,不需要走matplotlib渲染流程,修改后代码如下:

import wikipedia
import re
from wordcloud import WordCloud, STOPWORDS
import svgwrite # 需提前执行pip install svgwrite安装

# 文本处理逻辑和之前一致
wiki = wikipedia.page('Puzzle')
text = wiki.content
text = re.sub(r'==.*?==+', '', text)
text = text.replace('\n', '')

# 生成词云布局(仅需要布局数据,不需要渲染为栅格图像)
wc_width = 3000
wc_height = 2000
wordcloud = WordCloud(
    width = wc_width, 
    height = wc_height, 
    random_state=1, 
    background_color='black', 
    colormap='Pastel1', 
    collocations=False, 
    stopwords = STOPWORDS
).generate(text)

# 初始化矢量SVG对象
dwg = svgwrite.Drawing('cloud_test.svg', size=(wc_width, wc_height), profile='full')
# 添加背景色
dwg.add(dwg.rect(insert=(0,0), size=(wc_width, wc_height), fill=wordcloud.background_color))

# 遍历所有词的布局信息写入SVG
for (word, font_size, (x, y), angle, color) in wordcloud.layout_:
    # 如出现文字位置偏移,可调整y值为 y + font_size*0.8 适配不同字体的基线规则
    text = dwg.text(
        word,
        insert=(x, y),
        fill=color,
        font_size=font_size,
        font_family='Arial', # 可替换为你需要的字体
        text_anchor='start'
    )
    # 处理旋转角度
    if angle != 0:
        text.rotate(angle, center=(x, y))
    dwg.add(text)

# 保存纯矢量SVG文件
dwg.save()

上述代码生成的cloud_test.svg所有文字都是矢量格式,可直接编辑、无限放大不会失真。你如果需要调整字体、大小规则等,直接修改对应参数即可。

内容的提问来源于stack exchange,提问作者Katherine Elizabeth Kath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:36:03