1、Matplotlib 条形图
条形图或条状图是一种图表或图形,它显示带有矩形条的分类数据,其高度或长度与它们所代表的值成比例。可以垂直或水平绘制条形。
条形图显示了离散类别之间的比较。图表的一个轴显示要比较的特定类别,另一个轴表示测量值。
Matplotlib API提供了bar()函数,可以在MATLAB样式使用以及面向对象的API中使用。与axis对象一起使用的bar()函数的签名如下
ax.bar(x, height, width, bottom, align)
该函数使用大小为(x −width = 2; x + width=2; bottom; bottom + height)来绑定矩形创建条形图。
该函数的参数是 -
x - 表示条形的x坐标的标量序列。如果x是条形中心(默认)或左边缘,则对齐控件。
height - 标量或标量序列表示条的高度。
width - 标量或类似数组,可选。条形的宽度默认为0.8。
bottom - 标量或类似数组,可选。条形的y坐标默认为None。
align - {‘center’,‘edge’},可选,默认:center。
该函数返回包含所有条形的Matplotlib容器对象。以下是Matplotlib条形图的简单示例。它显示了在一所学院提供的各种课程的学生人数。
import matplotlib.pyplot as plt
import numpy as np
import math
plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False # 原文出自【立地货】,商业转载请联系作者获得授权,非商业请保留原文链接:
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
langs = ['C', 'C++', 'Java', 'Python', 'PHP']
students = [23,17,35,29,12]
ax.bar(langs,students)
plt.show()
执行上面示例代码,得到以下结果
当比较多个数量和更改一个变量时,可能需要一个条形图,其中有一个颜色的条形图用于一个数量值。
可以通过使用条形的厚度和位置来绘制多个条形图。数据变量包含三个系列的四个值。以下脚本将显示四个条形图的三个条形图。这些条的厚度为0.25个单位。每个条形图将从前一个移动0.25个单位。数据对象是一个多元图,包含过去四年在工程学院的三个分支中通过的学生数量。
import matplotlib.pyplot as plt
import numpy as np
import math
plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False # 原文出自【立地货】,商业转载请联系作者获得授权,非商业请保留原文链接:
data = [[30, 25, 50, 20],
[40, 23, 51, 17],
[35, 22, 45, 19]]
X = np.arange(4)
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.bar(X + 0.00, data[0], color = 'b', width = 0.25)
ax.bar(X + 0.25, data[1], color = 'g', width = 0.25)
ax.bar(X + 0.50, data[2], color = 'r', width = 0.25)
plt.show()
执行上面示例代码,得到以下结果
堆积条形图堆叠表示彼此顶部的不同组的条形图。结果为条形图的高度显示组的组合结果。
pyplot.bar()函数的可选bottom参数指定条的起始值。它不是从零运行到一个值,而是从底部到值。第一次调用pyplot.bar()绘制蓝条。第二次调用pyplot.bar()绘制红色条形图,蓝色条形图的底部位于红色条形图的顶部。
import matplotlib.pyplot as plt
import numpy as np
import math
plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False # 原文出自【立地货】,商业转载请联系作者获得授权,非商业请保留原文链接:
N = 5
menMeans = (20, 35, 30, 35, 27)
womenMeans = (25, 32, 34, 20, 25)
ind = np.arange(N) # the x locations for the groups
width = 0.35
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.bar(ind, menMeans, width, color='r')
ax.bar(ind, womenMeans, width,bottom=menMeans, color='b')
ax.set_ylabel('分数')
ax.set_title('按组和性别分数')
ax.set_xticks(ind, ('G1', 'G2', 'G3', 'G4', 'G5'))
ax.set_yticks(np.arange(0, 81, 10))
ax.legend(labels=['男', '女'])
plt.show()
执行上面示例代码,得到以下结果
2、Matplotlib 直方图
直方图是数值数据分布的精确表示。它是连续变量的概率分布的估计,它是一种条形图。要构建直方图,请按照以下步骤操作 -
Bin值范围。
将整个值范围划分为一系列间隔。
计算每个间隔中有多少值。
bins通常指定为变量的连续,非重叠区间。matplotlib.pyplot.hist()函数绘制直方图。它计算并绘制x的直方图。
参数
下表列出了直方图的参数 -
x - 数组或数组序列。
bins - 整数或序列或auto,可选项。
range - bins的下部和上部范围。
density - 如果为True,则返回元组的第一个元素将是规范化以形成概率密度的计数。
cumulative - 如果为True,则计算直方图,其中每个bin给出该bin中的计数加上较小值的所有bin。
histtype - 要绘制的直方图的类型,默认为bar。
下面的实例描绘了一个班级学生获得的标记直方图。定义了四个bins,0-25,26-50,51-75和76-100。直方图显示了落在此范围内的学生人数。
示例代码:
import matplotlib.pyplot as plt
import numpy as np
import math
plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False # 原文出自【立地货】,商业转载请联系作者获得授权,非商业请保留原文链接:
fig,ax = plt.subplots(1,1)
a = np.array([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27])
ax.hist(a, bins = [0,25,50,75,100])
ax.set_title("结果直方图")
ax.set_xticks([0,25,50,75,100])
ax.set_xlabel('分数')
ax.set_ylabel('学生数量')
plt.show()
执行上面示例代码,得到以下结果