Matplotlib如何在[0,1[区间绘制指定函数的10柱直方图
代码错误点
- 目标绘图区间是[0,1),但原代码x取值为0-9的整数,完全超出区间范围
np.arange(0,0.99)默认步长为1,实际仅会生成[0]单个元素,和需要的10个柱位不匹配axe.plot()返回的是线对象列表,不是数值数组,无法直接作为柱状图的高度参数传入- 多余的reshape操作将一维数组转为二维(1,10)结构,会触发维度不匹配的报错
正确实现代码
import matplotlib.pyplot as plt import numpy as np # 10根柱均分[0,1)区间,单根柱宽度为0.1 bar_width = 1 / 10 # 取每根柱的中点作为x坐标,共10个点,范围0.05~0.95 x = np.arange(bar_width / 2, 1, bar_width) # 按给定函数计算每根柱对应的高度 y = np.power(x, 3) - np.power(x, 2) + 1/10 # x轴刻度标签 labels = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten'] plt.bar(x, y, width=bar_width) plt.xticks(x, labels) plt.title("y = x³ - x² + 0.1 (interval [0,1))") plt.show()
如果需要柱子完全贴齐[0,1)区间边界,可将x替换为区间左端点数组
np.arange(0, 1, bar_width),此时柱子会从0、0.1、0.2…0.9位置起始排列,刚好占满整个区间。
内容的提问来源于stack exchange,提问作者MrTiredVeryTired
相关产品推荐
相关产品推荐

