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

如何用Matplotlib绘制间距过大的数据?解决X轴刻度拥挤问题

解决X轴刻度过多的问题

针对数值间距过大时X轴刻度拥挤、图表显示异常的问题,以下是两种直接可行的解决思路:

思路1:仅显示有数据的X轴刻度与柱子

这种方法会自动跳过零密度区间,只在存在输入数值的位置绘制柱子和刻度,彻底避免空区间导致的刻度冗余。

修改后的代码如下:

import numpy as np
from collections import Counter
import matplotlib.pyplot as plt

def plot(l = np.array([])):
    plt.style.use('classic')
    plt.title(f'NUMBERS PLOT')
    plt.ylabel('NUMBERS DENSITY')
    plt.xlabel('GIVEN NUMBERS')

    if len(l) == 0:
        return plt.show()  # 处理空输入的边界情况

    # 提取输入数组中唯一的数值并排序
    unique_nums = np.sort(np.unique(l))
    
    # 为每个唯一值创建对齐的bins,确保柱子宽度为1
    bins = np.concatenate([
        [unique_nums[0]-0.5],
        (unique_nums[:-1] + unique_nums[1:])/2,
        [unique_nums[-1]+0.5]
    ])
    
    freq_num = Counter(l)
    most_freq = freq_num.most_common(1)[0][1]
    
    plt.hist(l, bins=bins)
    plt.yticks(np.arange(0, most_freq+2, 1.0))
    plt.xticks(unique_nums)  # 仅显示存在数据的刻度
    plt.xlim([unique_nums[0]-1, unique_nums[-1]+1])

    return plt.show()

关键改动说明:

  • 移除原函数中冗余的m、M参数,避免参数定义与内部计算冲突
  • 通过np.unique(l)筛选出实际存在的数值,仅针对这些值生成bins和刻度
  • 自定义bins结构,确保每个柱子与对应数值的刻度精准对齐
  • X轴仅保留有数据的刻度,零密度区间自动被跳过

思路2:用自适应bins合并空区间

如果需要保留X轴的整体范围,但减少刻度数量,可以让matplotlib自动选择最优bins,或手动指定bins数量:

将原代码中的bins生成部分替换为:

# 手动指定bins数量,可根据数据范围调整
bins = 20
# 或者让matplotlib自动选择最优划分
# bins='auto'

plt.hist(l, bins=bins)
plt.xticks(plt.xticks()[0])  # 自动生成适配的刻度

这种方法适合数据分布相对均匀的场景,但如果零密度区间占比过大,仍可能出现少量空柱子。

内容的提问来源于stack exchange,提问作者Fábio Marane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:15:21