如何在 Matplotlib 中绘制数据列表的直方图

我们可以使用 plt.hist() 方法从数据列表中绘制直方图。

plt.hist() 方法的语法

matplotlib.pyplot.hist(x,
                        bins=None,
                        range=None,
                        density=False,
                        weights=None,
                        cumulative=False,
                        bottom=None,
                        histtype='bar',
                        align='mid',
                        orientation='vertical',
                        rwidth=None,
                        log=False,
                        color=None,
                        label=None,
                        stacked=False, *,
                        data=None,
                        **kwargs)

示例:从数据列表中使用 Matplotlib 绘制直方图

import matplotlib.pyplot as plt
data = [3,4,2,3,4,5,4,7,8,5,4,6,2,1,0,9,7,6,6,5,4]
n, bins, patches=plt.hist(data)
plt.xlabel("Values")
plt.ylabel("Frequency")
plt.title("Histogram")
plt.show()

输出:

如何在 Matplotlib 中绘制数据列表的直方图

在这里,我们在一个列表 data 中有数值。我们将这个列表传入 plt.hist() 命令,从值列表中生成一个直方图。plt.hist() 方法会返回二进制的频率、二进制的端点以及用于创建直方图的补丁列表。

在本例中,我们没有设置 bins 参数的值。默认情况下,bins 的值是 10,所以脚本会从 10 个 bins 的数据列表中创建直方图。

此外,我们可以在制作直方图时使用 bins 命令控制直方块的数量。

import matplotlib.pyplot as plt
data = [3,4,2,3,4,5,4,7,8,5,4,6,2,1,0,9,7,6,6,5,4]
n, bins, patches=plt.hist(data,bins=20)
plt.xlabel("Values")
plt.ylabel("Frequency")
plt.title("Histogram with 20 bins")
plt.show()

输出:

如何在 Matplotlib 中绘制数据列表的直方图

这个过程显示了由 20 个直方块组成的直方图,这是平均划分整个列表值范围的结果。

默认情况下,density 参数的值被设置为 False;这意味着我们在直方图中得到每个 bin 的精确计数的图。如果我们想让列表中每个 bin 的概率密度图,我们需要将 density 设置为 True。如果 densityTrue,直方图下的区域积分为 1

import matplotlib.pyplot as plt
data = [3,4,2,3,4,5,4,7,8,5,4,6,2,1,0,9,7,6,6,5,4]
n, bins, patches=plt.hist(data,bins=20,density=True)
plt.xlabel("Weight")
plt.ylabel("Probability")
plt.title("Histogram with Probability Plot")
plt.show()

输出:

如何在 Matplotlib 中绘制数据列表的直方图

现在我们可以使用 color 参数设置直方图的颜色。

import matplotlib.pyplot as plt
data = [3,4,2,3,4,5,4,7,8,5,4,6,2,1,0,9,7,6,6,5,4]
n, bins, patches=plt.hist(data,bins=20,density=True,color='red')
plt.xlabel("Weight")
plt.ylabel("Probability")
plt.title("Red Histogram Plot")
plt.show()

输出:

如何在 Matplotlib 中绘制数据列表的直方图

此方法生成红色的直方图。

如何在 Matplotlib 中绘制水平和垂直线

在本教程中,我们将介绍两种在 Matplotlib 中绘制水平和垂直线条的方法。这两种方法在 Matplotlib 中使用不同的坐标系统。

  • axhline() / axvline()
  • hlines() / vlines()

axhlineaxvline 在 Matplotlib 中绘制水平和垂直线

axhline 画一条水平线

matplotlib.pyplot.axhline(y=0, xmin=0, xmax=1, hold=None, **kwargs)

axhline 在水平线的 y 数据坐标中的位置处绘制一条水平线,从 xminxmax,该点应位于 0.0 和之间 1.0,其中 0.0 是图的最左侧,1.0 是图的最右侧。

from matplotlib import pyplot as plt
xdata = list(range(10))
ydata = [_*2 for _ in xdata]
plt.plot(xdata, ydata, 'b')
plt.axhline(y=5, xmin=0.1, xmax=0.9)
plt.grid()
plt.show()

如何在 Matplotlib 中绘制水平和垂直线

axvline 画一条垂直线

同样,

matplotlib.pyplot.axvline(x=0, ymin=0, ymax=1, hold=None, **kwargs)

axvline 在垂直线的 x 数据坐标中的位置处绘制一条垂直线,从 yminymax,该点应在 0.0 和之间 1.0,其中 0.0 是图的底部,1.0 是图的顶部。

from matplotlib import pyplot as plt
xdata = list(range(10))
ydata = [_*2 for _ in xdata]
plt.plot(xdata, ydata, 'b')
plt.axvline(x=5, ymin=0.1, ymax=0.9)
plt.grid()
plt.show()

如何在 Matplotlib 中绘制水平和垂直线

如上所述,xmin/ xmaxymin/ ymax 是指 Matplot 图,而不是所绘制的数据线。

因此,如果我们放大或缩小绘图,则水平和垂直线的起点和终点将参考数据坐标进行更新,但会固定在绘图坐标中的相对位置。我们可以用下面的动画来更好的理解。

如何在 Matplotlib 中绘制水平和垂直线

hlinesvlines 在 Matplotlib 中绘制水平和垂直线

如果我们希望绘制的水平线和垂直线会自动更改以保持对所绘数据的相对位置,则需要使用 hlinesvlines

hlines(y, xmin, xmax)

这里 yxminxmax 指的是数据坐标值。

vlines(x, ymin, ymax)

这里 xyminymax 指的是数据坐标值。

让我们看下面的代码示例。

from matplotlib import pyplot as plt
xdata = list(range(10))
ydata = [_*2 for _ in xdata]
plt.plot(xdata, ydata, 'b')
plt.hlines(y=5, xmin=0, xmax=10)
plt.vlines(x=5, ymin=0, ymax=20)
plt.grid()
plt.show()

如何在 Matplotlib 中绘制水平和垂直线

如何在 Matplotlib 中绘制水平和垂直线

在 Matplotlib 中绘制水平和垂直线的结论

如果你绘制的线段跟绘图保持相对固定的位置,则 axhlineaxvline 应该是更好的选择。

如果你绘制的线段需要参照所绘数据,则 hlinesvlines 是更好的选择。

如何在 Matplotlib 中绘制水平和垂直线

如何在 Matplotlib 中绘制水平和垂直线

Conclusion of drawing horizontal and vertical lines in Matplotlib

If you need the line to be referred to the plot, axhline and axvline should be the better option.

If you prefer the line to stick to the data coordinate, hlines and vlines are the better choices.