绘制常见图表
matplotlib.pyplot模块中包含了快速生成多种图表的函数,这些函数的说明具体如表6-2所示。
表1 pyplot中绘制图表的函数
函数名称 | 函数说明 |
---|---|
bar | 绘制条形图 |
barh | 绘制水平条形图 |
hist | 绘制直方图 |
pie | 绘制饼图 |
specgram | 绘制光谱图 |
stackplot | 绘制堆积区域图 |
scatter | 绘制散点图 |
plot | 绘制折线图 |
boxplot | 绘制箱形图 |
接下来,从表1中选出一些比较常用函数进行举例,为大家介绍如何使用这些函数来绘制图表,具体内容如下。
(1)绘制直方图
直方图是统计报告图的一种,它由一系列高度不等的纵向条纹或线段来表示数据的分布情况,一般用横轴表示数据所属的类别,用纵轴表示数量或占比。
pyplot模块的hist()函数用于绘制直方图,其语法格式如下:
matplotlib.pyplot.hist(x,bins = None,range = None,density = None,weights = None,
cumulative = False,bottom = None,histtype ='bar',align ='mid',
orientation ='vertical',rwidth = None,log = False,color = None,
label = None,stacked = False,normed = None,hold = None,
data = None,** kwargs)
上述函数中常用参数表示的含义如下:
(1) x:表示输入值,可以是单个数组,或者不需要相同长度的数组序列。
(2) bins:表示绘制条柱的个数。若给定一个整数,则返回“bins+1”个条柱,默认为10。
(3) range:bins的上下范围(最大和最小值)。
(4) color:表示条柱的颜色,默认为None。
通过hist()函数绘制直方图的示例如下。
In [9]: arr_random = np.random.randn(100) # 创建随机数组
plt.hist(arr_random, bins=8, color='g', alpha=0.7) # 绘制直方图
plt.show() # 显示图形
上述示例中,首先创建了一个包含100个随机数的数组,用来表示绘制图形使用的数据,接着调用hist()函数绘制一个直方图,这个直方图共有8个条柱,每个条柱的颜色为绿色,透明度alpha为0.7,最后调用show()函数显示图形。
运行结果如图1所示。
图1 运行结果
(2)绘制散点图
散点图以某个特征为横坐标,以另外一个特征为纵坐标,通过散点的疏密程度和变化趋势表示两个特征的数量关系。
pyplot模块中的scatter()函数用于绘制散点图,其语法格式如下:
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None,
vmin=None, vmax=None, alpha=None, linewidths=None, verts=None,
edgecolors=None, hold=None, data=None, **kwargs)
上述函数中常用参数表示的含义如下:
(1) x, y:表示x轴和y轴对应的数据。
(2) s:指定点的大小。若传入的是一维数组,则表示每个点的大小。
(3) c:指定散点的颜色,若传入的是一维数组,则表示每个点的颜色。
(4) marker:表示绘制的散点类型。
(5) alpha:表示点的透明度,接收0~1之间的小数。
通过scatter()函数绘制散点图的示例如下。
In [10]:# 创建包含整数0~50的数组,用于表示x轴的数据
x = np.arange(51)
# 创建另一数组,用于表示y轴的数据
y = np.random.rand(51) * 10
plt.scatter(x, y) # 绘制散点图
plt.show()
上述示例中,首先创建了一个包含整数0~50的数组,这些数值将作为散点图中x轴对应的数据,数组乘以10的结果将作为y轴对应的数据,然后调用scatter()函数绘制一个散点图,最后调用show()函数显示图形。
运行结果如图2所示。
图2 运行结果
(3)绘制柱状图
柱状图是一种以长方形的长度为变量表达图形的统计报告图,它由一系列高度不等的纵向条纹表示数据分布的情况。
pyplot模块中用于绘制柱状图的函数为bar(),其语法格式如下:
bar(x, height, width, *, align='center', **kwargs)
上述函数中常用参数表示的含义如下:
(1) x:表示x轴的数据。
(2) height:表示条形的高度。
(3) width:表示条形的宽度,默认为0.8。
(4) color:表示条形的颜色。
(5) edgecolor:表示条形边框的颜色。
通过bar()函数绘制柱状图的示例如下。
In [11]:# 创建包含0~4的一维数组
x = np.arange(5)
# 从上下限范围内随机选取整数,创建两个2行5列的数组
y1, y2 = np.random.randint(1, 31, size=(2, 5))
width = 0.25 # 条形的宽度
ax = plt.subplot(1, 1, 1) # 创建一个子图
ax.bar(x, y1, width, color='r') # 绘制红色的柱形图
ax.bar(x+width, y2, width, color='g') # 绘制另一个绿色的柱形图
ax.set_xticks(x+width) # 设置x轴的刻度
# 设置x轴的刻度标签
ax.set_xticklabels(['January', 'February', 'March', 'April ', 'May '])
plt.show() # 显示图形
在上述示例中,首先创建了包含整数0~4的数组,将其作为x轴的数据,接着又创建了两个2行5列的二维数组,这些数组的数据是从1~30内随机选取的整数,然后在指定编号为1的子图上,调用bar()函数绘制了两个柱形图,其中,第一个柱形图的x、y轴使用的数据为x和y1,颜色为红色,第二个柱形图的x、y轴使用的数据为x+width和y2,颜色为绿色,最后设置了x轴的刻度标签为“January、February、March、April 、May ”,并显示了画好的图形。
运行结果如图3所示。
图3 运行结果
多学一招:颜色、线型、标记的设置
在使用绘制图表的函数(比如plot、scatter等)画图时,可以设定线条的相关参数,包括颜色、线型和标记风格。其中,线条颜色使用color参数控制,线型使用linestyle参数控制,而标记风格使用marker参数控制。下面来列举每个参数所支持的取值。
color参数支持如表2中所列举的颜色值。
表2 color参数支持的颜色值
颜色值 | 说明 |
---|---|
b(blue) | 蓝色 |
g(green) | 绿色 |
r(red) | 红色 |
c(cyan) | 青色 |
m(magenta) | 品红 |
y(yellow) | 黄色 |
k(black) | 黑色 |
w(white) | 白色 |
linestyle参数的取值与意义如表3所示。
表3 linestyle参数支持的样式值
颜色值 | 说明 |
---|---|
‘-’ | 实线 |
‘--’ | 长虚线 |
‘-.’ | 短点相间线 |
‘:’ | 短虚线 |
marker参数的取值与意义如表4所示。
表4 marker参数支持的标记值
颜色值 | 说明 |
---|---|
‘o’ | 实心圆圈 |
‘D’ | 菱形 |
‘h’ | 六边形1 |
‘H’ | 六边形2 |
‘8’ | 八边形 |
‘p’ | 五边形 |
‘+’ | 加号 |
‘.’ | 点 |
‘s’ | 正方形 |
‘*’ | 星形 |
‘v’ | 倒三角形 |
‘^’ | 正三角形 |
‘>’ | 一角朝右的三角形 |
‘<’ | 一角朝左的三角形 |
接下来,通过一个简单的示例程序来演示如何给折线图设置颜色、线型和标记风格,具体代码如下。
In [12]:data = np.arange(1, 3, 0.3)
# 绘制直线,颜色为青色,标记为“x”,线型为长虚线
plt.plot(data, color="c", marker="x", linestyle="--")
# 绘制直线,颜色为品红,标记为实心圆圈,线型为短虚线
plt.plot(data+1, color="m", marker="o", linestyle=":")
# 绘制直线,颜色为黑色,标记为五边形,线型为短点相间线
plt.plot(data+2, color="k", marker="p", linestyle="-.")
# 也可采用下面的方式绘制三条不同颜色、标记和线型的直线
# plt.plot(data, 'cx--', data+1, 'mo:', data+2, 'kp-.')
plt.show()
运行结果如图4所示。
图4 运行结果