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

使用Python Matplotlib结合双列表绘制直方图时遇单调递增错误求解

解决ValueError: bins must increase monotonically的问题

嘿,这个报错的问题我之前也碰到过!核心原因是你把Y列表直接塞给了hist函数的bins参数,但这个参数要求必须是单调递增的区间数组,而你的Y数据显然不是干这个用的——它是你从文件里读的另一列数值,大概率存在重复或者乱序的情况,所以触发了这个错误。

先理清楚你的需求,分三种常见情况给出解决方案:

情况1:你确实想画X的直方图(统计Time的分布)

直方图的作用是统计一组数据的分布频率,plt.hist()的第二个参数bins是用来指定统计区间的,不是另一列数据。你可以让matplotlib自动计算合适的区间,或者手动定义单调递增的区间:

import matplotlib.pyplot as plt
import numpy as np

X, Y = [], []
for line in open('data_simple.txt', 'r'):
    values = [float(s) for s in line.split()]
    X.append(values[0])
    Y.append(values[1])

# 方案A:让matplotlib自动计算bins(最省心)
n, bins, patches = plt.hist(X, facecolor='g', alpha=0.75)

# 方案B:手动定义单调递增的区间,比如把X的范围分成10组
# bins = np.linspace(min(X), max(X), 10)
# n, bins, patches = plt.hist(X, bins=bins, facecolor='g', alpha=0.75)

plt.xlabel('Time')
plt.ylabel('Frequency')  # 直方图的y轴是数据出现的频率/次数
plt.show()

情况2:你其实想画柱状图(展示不同Time对应的Core数量)

如果你的需求是展示每个Time点对应的Core数量,那你应该用柱状图plt.bar(),而不是直方图:

import matplotlib.pyplot as plt
import numpy as np

X, Y = [], []
for line in open('data_simple.txt', 'r'):
    values = [float(s) for s in line.split()]
    X.append(values[0])
    Y.append(values[1])

# 绘制柱状图
plt.bar(X, Y, facecolor='g', alpha=0.75)
plt.xlabel('Time')
plt.ylabel('Num of Cores')
plt.show()

情况3:按Core数量分组,统计每组Time的分布

如果你的需求是把X(Time)按Y(Core数量)分组,然后分别画每组的直方图,可以这样做:

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

X, Y = [], []
for line in open('data_simple.txt', 'r'):
    values = [float(s) for s in line.split()]
    X.append(values[0])
    Y.append(values[1])

# 按Core数量分组Time数据
core_groups = defaultdict(list)
for time, core_num in zip(X, Y):
    core_groups[core_num].append(time)

# 为每组绘制直方图,添加图例区分
for core, times in core_groups.items():
    plt.hist(times, label=f'Cores: {int(core)}', alpha=0.5)

plt.xlabel('Time')
plt.ylabel('Frequency')
plt.legend()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:49:55