绘制条形图或堆积条形图
使用barh()绘制条形图或堆积条形图
barh()函数的语法格式如下所示:
barh(y,width,height=0.8,left=None,align='center',*,**kwargs)
该函数常用的参数的含义如下
y:表示条形的y坐标值。
width:表示条形的宽度,默认值为0.8.
height:表示条形的高度。
left:条形左侧的x轴坐标,默认值为0。
align:表示条形的对齐方式,有'center'和'edge'俩个取值,其中’center'表示将条形与刻度对齐;'edge'表示将条形的底边与刻度线对齐。
barh()函数会返回一个BarContainer类的对象
例如,使用barh()函数绘制条形图,代码如下。
import numpy as np
import matplotlib.pyplot as plt #导入模块
y=np.arange(5)
x1=np.array([10,8,7,11,13]) #准备数据
bar_height = 0.3 #条形的高度
fig=plt.figure() #创建代表画布的Figure类的对象fig
ax=fig.add_subplot() #在画布上添加坐标系风格的绘画区域ax
ax.barh(y,x1,tick_label=['a','b','c','d','e'],height=bar_height) #绘制图表
plt.show() #展示图表
使用pyplot的barh()函数还可以绘制具有多组条形的条形图。例如,使用barh()函数绘制具有俩组条形的条形图,代码如下:
import numpy as np
import matplotlib.pyplot as plt #导入模块
y=np.arange(5)
x1=np.array([10,8,7,11,13])
x2=np.array([9,6,5,10,12])#准备数据
bar_height = 0.3 #条形的高度
fig=plt.figure() #创建代表画布的Figure类的对象fig
ax=fig.add_subplot() #在画布上添加坐标系风格的绘画区域ax
ax.barh(y,x1,tick_label=['a','b','c','d','e'],height=bar_height)
ax.barh(y+bar_height,x2,height=bar_height) #绘制图表
plt.show() #展示图表
使用pyplot的barh()函数绘制图表时,可以通过给left参数传值的方式控制条形图的x值,使后绘制的条形位于先绘制的条形的右方。例如,使用barh()函数绘制由俩组条形堆叠而成的堆积条形图,代码如下:
import numpy as np
import matplotlib.pyplot as plt #导入模块
y=np.arange(5)
x1=np.array([10,8,7,11,13])
x2=np.array([9,6,5,10,12]) #准备数据
bar_height = 0.3 #条形的高度
fig=plt.figure() #创建代表画布的Figure类的对象fig
ax=fig.add_subplot() #在画布上添加坐标系风格的绘画区域ax
ax.barh(y,x1,tick_label=['a','b','c','d','e'],height=bar_height)
ax.barh(y,x2,left=x1,height=bar_height) #绘制图表
plt.show() #展示图表
另外,我们在使用pyplot的barh()函数绘制图表时,可以通过给xerr,yerr参数传值的方式为条形添加误差棒,示例代码如下。
import numpy as np
import matplotlib.pyplot as plt #导入模块
y=np.arange(5)
x1=np.array([10,8,7,11,13])
x2=np.array([9,6,5,10,12]) #准备数据
bar_height = 0.3 #条形的高度
error = [2,1,2.5,2,1.5]
fig=plt.figure() #创建代表画布的Figure类的对象fig
ax=fig.add_subplot() #在画布上添加坐标系风格的绘画区域ax
ax.barh(y,x1,tick_label=['a','b','c','d','e'],height=bar_height)
ax.barh(y,x2,left=x1,height=bar_height,xerr=error) #绘制图表
plt.show() #展示图表
绘制堆积面积图
使用stackplot()绘制堆积面积图
使用pyplot的stackploth()函数可以快速地绘制堆积面积图,stackplot()函数语法格式如下所示:
stackplot(x,y,labels=(),baseline()='zero',data=None,*args,**kwargs)
该函数常用参数的含义如下。
x:表示x轴的数据,可以是一维数组。
y:表示y轴的数据,可以是二维数组或一维数组序列。
labels:表示每组折线及填充区域的标签。
baseline :表示计算基线的方法,包括'zero'、'sym'、 'wiggle' 和'weighted_wiggle'。其中,
'zero'表示恒定零基线,即简单的堆积图; 'sym'表示对称于零基线; 'wiggle'表示最小化平方斜率的总和; 'weighted wiggle' 表示执行相同的操作,但权重用于说明每层的大小。
例如,用stackplot()函数绘制由3条折线及下方填充区域堆叠的堆积面积图,代码如下。
import numpy as np
import matplotlib.pyplot as plt #导入模块
x=np.arange(6)
y1=np.array([1,4,3,5,6,7])
y2=np.array([1,3,4,2,7,6])
y3=np.array([3,4,3,6,5,5]) #准备数据
fig=plt.figure() #创建代表画布的Figure类的对象fig
ax=fig.add_subplot() #在画布上添加坐标系风格的绘画区域ax
ax.stackplot(x,y1,y2,y3) #绘制图表
plt.show() #展示图表
绘制直方图
使用hist()绘制直方图
使用pyplot的hist()函数可以快速绘制直方图,hist()函数的语法格式如下所示:
hist (X, bins=None, range=None, density=None, weights=None,
cumulative=False, bottom-None, histtype='bar', align='mid' ,
orientation= 'vertical', rwidth-None, log-False, label=None,
stacked-False, normed None, * , data-None, ** kwargs)
该函数常用参数的含义如下。
x:表示x轴的数据,可以为单个数组成多个数组的序列。
bins:表示矩形条的个数,默认为10。
range: 表示数据的范围。若没有提供range参数的值,则数据范围为(x.min(),x.max())。
cumulative :表示是否计算累计频数或频率。
bistype:表示直方图的类型,支持"bar'、 'astacked'、'step'、'stepfilled' 四种取值,其中'bar'为默认值,代表传统的直方图; 'barstacked'代表唯积直方图; 'step'代表朱填充的线条直方图; 'stepfilled'代表填充的线条直方图。
align: 表示矩形条边界的对齐方式,可设置为'left'、 'mid'或'right', 默认为'mid'。
orientation :表示矩形条的摆放方式,默认为'vertical', 即垂直方向。
rwidth:表示矩形条宽度的百分比,默认为0。若histtype的值为'step'或'tepilled',则直接忽略rwidth参数的值。
stacked:表示是否将多个矩形条以堆积形式摆放。
例如,绘制一个具有 8个矩形条填充的线条直方图,代码如下。
import numpy as np
import matplotlib.pyplot as plt #导入模块
scores = np.random.randint(0,100,50) #准备50个随机测试数据
fig=plt.figure() #创建代表画布的Figure类的对象fig
ax=fig.add_subplot() #在画布上添加坐标系风格的绘画区域ax
ax.hist(scores,bins=8,histtype='stepfilled') #绘制图表
plt.show() #展示图表
下面使用一组10000个随机数作为人脸识别的灰度值,使用hist()函数绘制一个灰度直方图,具体代码如下。
import numpy as np
import matplotlib.pyplot as plt #导入模块
random_state = np.random.RandomState(19680801)
random_x = random_state.randn(10000) #10000个随机数
fig=plt.figure() #创建代表画布的Figure类的对象fig
ax=fig.add_subplot() #在画布上添加坐标系风格的绘画区域ax
ax.hist(random_x,bins=25) #绘制图表
plt.show() #展示图表
绘制饼图或圆环图
使用pie()绘制饼图或圆环图
使用pyplot的pie()函数可以快速地绘制饼图或圆环图,pie()函数的语法格式如下所示:
pie(x, explode=None, labels=None, autopct=None,
pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None,
radius-None, counterclock=True, wedgeprops=None, textprops=None,
center=(0, 0), frame=False, rotatelabels=False, *, data=None)
该函数常用参数的含义如下。
x:表示扇形或楔形的数据。
explode: 表示扇形或楔形离开圆心的距离。
labels: 表示扇形或楔形对应的标签文本。
autopct :表示控制扇形成根形的数值显示的字符事,可通过格式字符串指定小数点后的位数。
pcdisance:表示扇形或楔形对应的数值标签距离圆心的比例,默认为0.6。
shadow:表示是否显示阴影。
labeldistance :表示标签文 本的绘制位置(相对于 半径的比例), 默认为1.1。
startangle:表示起始绘制角度,默认从x轴的正方向逆时针绘制。
radius: 表示扇形或楔形的半径
wedgeprops :表示控制扇形或楔形属性的字典。例如,通过wedgeprops = {'width': 0.7}将楔形的宽度设为0.7。
textprops :表示控制图表中文本属性的字典。
center:表示图表的中心点位置,默认为(0,0)。
frame: 表示是否显示图框。
例如,使用pie()函数绘制一个饼图, 代码如下。
import numpy as np
import matplotlib.pyplot as plt #导入模块
data = np.array([20,50,10,15,30,55])
pie_labels = np.array(['A','B','C','D','E','F']) #准备数据
fig=plt.figure() #创建代表画布的Figure类的对象fig
ax=fig.add_subplot() #在画布上添加坐标系风格的绘画区域ax
ax.pie(data,radius=1.5,labels=pie_labels,autopct='%3.1f%%')
#绘制饼图:半径为0.5,数值保留1位小数
plt.show() #展示图表
例如,使用pie()函数绘制一个圆环图,代码如下。
import numpy as np
import matplotlib.pyplot as plt #导入模块
data = np.array([20,50,10,15,30,55])
pie_labels = np.array(['A','B','C','D','E','F']) #准备数据
fig=plt.figure() #创建代表画布的Figure类的对象fig
ax=fig.add_subplot() #在画布上添加坐标系风格的绘画区域ax
ax.pie(data,radius=1.5,wedgeprops={'width':0.7},labels=pie_labels,autopct='%3.1f%%',pctdistance=0.75)
#绘制圆环图:外圆半径为1.5,楔形宽度为0.7
plt.show() #展示图表
使用pie()函数绘制用户A某月支付宝消费情况的饼图,具体代码如下。
import numpy as np
import matplotlib.pyplot as plt #导入模块
kinds=['购物','人情往来','餐饮美食','通信物流','生活日用','交通出行','休闲娱乐','其他']
money_scale=[800/3000,100/3000,1000/3000,200/3000,300/3000,200/3000,200/3000,200/3000]#准备数据
dev_position = [0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1]
fig=plt.figure() #创建代表画布的Figure类的对象fig
ax=fig.add_subplot() #在画布上添加坐标系风格的绘画区域ax
ax.pie(money_scale,labels=kinds,autopct='%3.1f%%',shadow=True,explode=dev_position,startangle=90)
plt.show() #展示图表
绘制散点图或气泡图
使用scatter()绘制散点图或气泡图
使用pyplot的scatter()函数可以快速绘制散点图或气泡图,scatter()函数的语法格式如下:
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, *, plotnonfinite,=False, data=None,**kwargs)
该函数常用参数的含义如下。
x,y :表示数据点的位置。
s:表示数据点的大小。
C:表示数据点的颜色。
marker :表示数据点的样式,默认为圆形。
cmap :表示数据点的颜色映射表,仅当参数c为浮点数组时才使用。
norm :表示数据亮度,可以取值为0 ~ 1。
vmin, vmax:表示亮度的最小值和最大值。若传入了norm参数,则忽略vmin和
vmax参数。
alpha:表示透明度,可以取值为0~ 1。
linewidths:表示数据点边缘的宽度。
edgecolors: 表示数据点边缘的颜色。
使用scatter()函数绘制一个散点图,代码如下。
import numpy as np
import matplotlib.pyplot as plt #导入模块
fig = plt.figure() #创建类
ax = fig.add_subplot() #给画布fig上添加坐标系风格的绘图区域ax
num = 50 #随机50个数
x = np.random.rand(num)
y = np.random.rand(num)
ax.scatter(x, y) #绘制图表
plt.show() #展示图表
使用scatter()函数绘制一个气泡图,代码如下:
import numpy as np
import matplotlib.pyplot as plt #导入模块
fig = plt.figure() #创建类
ax = fig.add_subplot() #给画布fig上添加坐标系风格的绘图区域ax
num = 50 #随机50个数
x = np.random.rand(num)
y = np.random.rand(num)
area= (30 * np.random.rand(num))**2 #随机数据点大小
ax.scatter(x, y, s=area) #绘制气泡图
plt.show() #展示气泡图
使用scatter()函数绘制一个散点图,代码如下:
import numpy as np
import matplotlib.pyplot as plt #导入模块
fig = plt.figure() #创建类
ax = fig.add_subplot() #给画布fig上添加坐标系风格的绘图区域ax
x_speed = np.arange(10, 210, 10) #准备x轴和y轴的数据
y_distance = np.array([0.5, 2.0, 4.4, 7.9, 12.3,
17.7, 24.1, 31.5, 39.9, 49.2,
59.5, 70.8, 83.1, 96.4, 110.7,
126.0, 142.2, 159.4, 177.6, 196.8])
ax.scatter(x_speed, y_distance, s=50, alpha=0.9) #s表示数据点大小,alpha表示透明度
plt.show() #展示散点图
绘制误差棒图
使用errorbar()绘制误差图
使用pyplot的errorbar()函数可以快速绘制误差棒图,errorbar()函数的语法格式如下:
errorbar(x, y, yerr=None, xerr=None, fmt='', ecolor=None,
elinewidth=None, capsize=None, barsabove=False, lolims=False,
uplims=False, xlolims=False, xuplims=False, errorevery=1,
capthick=None, *, data=None, **kwargs)
该函数常用参数的含义如下。
x,y:表示数据点的位置。
xerr, yerr:表示数据的误差范围。
fmt:表数据点的标记样式和数据点之间连接线的样式。
ecolor:表示误差棒的线条颜色。
elinewidth: 表示误差棒的线条宽度)
capsize :表示误差棒边界横杆的大少。
capthick:表示误差棒边界横杆的厚度。
使用errorbar()函数绘制一个误差棒图,代码如下。
import numpy as np
import matplotlib.pyplot as plt #导入模块
fig = plt.figure() #创建类
ax = fig.add_subplot() #给画布fig上添加坐标系风格的绘图区域ax
x = np.arange(5) #准备数据
y = (25, 32, 34, 20, 25)
y_offset = (3, 5, 2, 3, 3) #准备误差
ax.errorbar(x, y, yerr=y_offset, capsize=3, capthick=2) #capsize表示误差棒边界横杆的大小,capthick表示误差棒边界横杆的厚度
plt.show() #展示图表
下面用柱形图和误差棒图绘制实例图,代码如下:
import matplotlib.pyplot as plt
import numpy as np
#导入模块
# 显示中文
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
# 创建画布
fig = plt.figure()
# 在画布上添加绘图区域
ax = fig.add_subplot(111)
# 准备数据
# 准备 x 轴和 y 轴的数据
x = np.arange(3)
y1 = np.array([2.04, 1.57, 1.63])
y2 = np.array([1.69, 1.61, 1.64])
y3 = np.array([4.65, 4.99, 4.94])
y4 = np.array([3.39, 2.33, 4.10])
# 指定测量偏差
error1 = [0.16, 0.08, 0.10]
error2 = [0.27, 0.14, 0.14]
error3 = [0.34, 0.32, 0.29]
error4 = [0.23, 0.23, 0.39]
bar_width = 0.2
# 调用绘图方法绘制图表
width = 0.2
ax.bar(x, y1,width=bar_width)
ax.bar(x+width, y2,align='center',tick_label=['春季','夏季','秋季'],width=bar_width)
ax.bar(x+2*width, y3,width=bar_width)
ax.bar(x+3*width, y4,width=bar_width)
# 添加误差棒
ax.errorbar(x,y1,yerr=error1,capsize=4,capthick=1,fmt='k,')
ax.errorbar(x+width,y2,yerr=error2,capsize=4,capthick=1,fmt='k,')
ax.errorbar(x+2*width,y3,yerr=error3,capsize=4,capthick=1,fmt='k,')
ax.errorbar(x+3*width,y4,yerr=error4,capsize=4,capthick=1,fmt='k,')
# 展示图表
plt.show()