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

Matplotlib如何将图表X轴按token长度升序重新排序?

修改Token长度频率分布图表的X轴为升序排列

原函数使用nltk.FreqDist.plot()时,X轴默认按token长度的出现频率降序排列,要改成固定按2、3、4、5、6的升序展示,我们可以手动指定目标长度范围,统计对应频率后用matplotlib原生方法绘图,确保不同文本的图表X轴一致,方便对比。

修改后的composition函数代码

import matplotlib.pyplot as plt
import nltk

def composition(tokens, title):
    '''生成语料库的token长度组成曲线,X轴按2、3、4、5、6升序排列'''
    token_lengths = [len(token) for token in tokens]
    # 指定要展示的token长度范围,固定为2-6升序
    target_lengths = [2, 3, 4, 5, 6]
    # 统计每个目标长度的出现次数
    length_counts = [token_lengths.count(length) for length in target_lengths]
    
    fig = plt.figure()
    plt.gcf().subplots_adjust(bottom=0.15)
    
    # 使用matplotlib原生柱状图绘图,完全控制X轴顺序
    plt.bar(target_lengths, length_counts, width=0.8)
    # 若需要折线图,可替换为:plt.plot(target_lengths, length_counts, marker='o')
    
    plt.title(f'{title}')
    plt.xlabel('Token长度')
    plt.ylabel('出现次数')
    # 强制X轴刻度为指定的长度值,确保顺序固定
    plt.xticks(target_lengths)
    
    plt.show()
    fig.savefig(f'{title}.png')

配套的tokenize函数(无需修改)

def tokenize(text, language):
    '''对给定文本进行分词,返回过滤后的token列表'''
    tokens = nltk.word_tokenize(text=text.lower(), language=f"{language}")
    # 过滤掉不含字母的token(移除标点等非单词内容)
    tokens = ([token for token in tokens if any(c.isalpha() for c in token)])
    return tokens

关键改动说明

  • 新增target_lengths固定要展示的长度范围,确保不同文本的图表X轴完全一致
  • 手动统计每个目标长度的出现次数,摆脱FreqDist.plot()默认的频率排序逻辑
  • 使用matplotlib原生绘图方法,完全控制X轴的显示顺序
  • 添加X/Y轴标签,让图表信息更直观清晰

内容的提问来源于stack exchange,提问作者KWunsch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:31:19