本程序基于pyecharts
模块,对其功能做了一个封装,使得用户无需了解pyecharts
相关细节也可以制作出精美的词云。
如此一来,用户只需要修改两个txt 文档,即可对整个词云图进行丰富的自定义设计。
如上所述,根据我上一篇文章:《你的Python 程序那么多设置项,为何不制作一个配置文件!》
要想让程序找到两个分别对应词条信息和配置信息的txt 文档,首先肯定是要获取到当前程序文件的路径,然后再通过路径找到那两个txt 文件。我就让两个txt 文件分别命名为【词条.txt】和【配置.txt】。
若其与程序属同一目录,则其路径分别为程序路径\词条.txt
和程序路径\配置.txt
代码实现如下:
#==================== 各个文件的路径 ====================
# 当前文件夹路径
FOLDER_PATH = os.path.dirname(os.path.abspath(__file__))
# 配置文件路径
Config_PATH = FOLDER_PATH + "\\配置.txt"
# 词云数据路径
WordCloud_DATA_PATH = FOLDER_PATH + "\\词条.txt"
# 生成词云图路径
WordCloue_PATH = FOLDER_PATH + "\\词云图.html"
同样在《你的Python 程序那么多设置项,为何不制作一个配置文件!》中,我们可以知道要想让一个程序把配置文件的配置存储在一个字典中,可以这样写:
(这是配置文件的格式)
(这是读取配置的代码)
#================= 根据配置文件加载配置 =================
Config_f = open(Config_PATH, "r",encoding='utf-8')
Config_data = Config_f.read() # 读取完整数据
Config_f.close()
Vari_dict = {"主标题":"", "副标题":"", "左边间隔":"", "上边间隔":"",\
"右边间隔":"", "下边间隔":"", "四周间隔":"", "主副标题间隔":"",\
"词云图轮廓":"","单词字体大小范围":"", "主标题字体大小":"", "副标题字体大小":"",\
"旋转单词角度":"", "距离左边的距离":"", "距离上边的距离":"",\
"距离右边的距离":"", "距离下边的距离":"", "词云图的宽度":"", \
"词云图的高度":"", "是否允许词云图的数据展示在画布范围之外":""}
for i in Vari_dict.keys():
start=Config_data.find(i)
Vari_dict[i] = Config_data[start+len(i)+1:Config_data.find("\n", start)]
再次根据我另一篇文章:《Python 逐行读取txt 文件并生成列表》中,可知我可以这样进行词条信息的录入:
(这是词条文件的格式)
(这是对应代码)
#===================== 读取文件数据 =====================
txt_tables = []
f = open(WordCloud_DATA_PATH, "r",encoding='utf-8')
line = f.readline() # 读取第一行
while line:
try:
txt_data = eval(line) # 可将字符串变为元组
except Exception as ex:
print("数据格式错误")
break
txt_tables.append(txt_data) # 列表增加
line = f.readline() # 读取下一行
f.close()
有了词条信息和配置信息,那么我们就可以直接生成词云图了:
#======================= 构建词云 =======================
(
WordCloud()
.add(series_name="WordCloud", # 系列名称,用于 tooltip 的显示,legend 的图例筛选。
data_pair=txt_tables, # 系列数据项,[(word1, count1), (word2, count2)]
shape=Vari_dict["词云图轮廓"], # 词云图轮廓,有 'circle', 'cardioid', 'diamond', 'triangle-forward', 'triangle', 'pentagon', 'star' 可选
word_size_range=eval(Vari_dict["单词字体大小范围"]), # 单词字体大小范围
rotate_step=eval(Vari_dict["旋转单词角度"]), # 旋转单词角度
pos_left=eval(Vari_dict["距离左边的距离"]), # 距离左侧的距离
pos_top=eval(Vari_dict["距离上边的距离"]), # 距离顶部的距离
pos_right=eval(Vari_dict["距离右边的距离"]), # 距离右侧的距离
pos_bottom=eval(Vari_dict["距离下边的距离"]), # 距离底部的距离
width=eval(Vari_dict["词云图的宽度"]), # 词云图的宽度
height=eval(Vari_dict["词云图的高度"]), # 词云图的高度
is_draw_out_of_bound=eval(Vari_dict["是否允许词云图的数据展示在画布范围之外"]), # 允许词云图的数据展示在画布范围之外
)
.set_global_opts(
title_opts=opts_.TitleOpts(
title=(Vari_dict["主标题"]),
subtitle=(Vari_dict["副标题"]),
pos_left=eval(Vari_dict["左边间隔"]),
pos_right=eval(Vari_dict["右边间隔"]),
pos_bottom=eval(Vari_dict["下边间隔"]),
pos_top=eval(Vari_dict["上边间隔"]),
padding=eval(Vari_dict["四周间隔"]),
item_gap=eval(Vari_dict["主副标题间隔"]),
title_textstyle_opts=opts_.TextStyleOpts(font_size=eval(Vari_dict["主标题字体大小"])),
subtitle_textstyle_opts=opts_.TextStyleOpts(font_size=eval(Vari_dict["副标题字体大小"]))
),
tooltip_opts=opts_.TooltipOpts(is_show=True),
)
.render(WordCloue_PATH)
)
我已经将我的程序文件打包上传:
https://download.csdn.net/download/weixin_40973138/12447579
使用也很简单,大家只需要根据自己的需求,修改【词条.txt】和【配置.txt】两个文件的内容即可。
注意: