文章目录
先将其导入:
import matplotlib.pyplot as plt
设置字体为黑体,没有它显示不出汉字,当然也可以设置其他字体
plt.rcParams['font.sans-serif'] = ['SimHei']
一、使用plot()绘制折线图
plot(x,y,fmt,sxalex=True,scaley=True,data=None,;label=None)
该函数的常用参数含义如下:
- x :表示x轴的数据
- y :表示y轴的数据
- fmt :表示快速设置线条样式的格式字符串
- label :表示图例的标签文本
案例:最近15天气温变化折线图
import numpy as np
import matplotlib.pyplot as plt
x=np.arange(4,19)
y_max=np.array([32,33,34,34,33,31,30,29,30,29,26,23,21,25,31])
y_min=np.array([19,19,20,22,22,21,22,16,18,18,17,14,15,16,16])
y=(y_max+y_min)/2
plt.plot(x,y)#平均气温
plt.plot(x,y_max)#最高气温
plt.plot(x,y_min)#最低气温
plt.show()#显示图形
运行结果如下图:
二、使用bar()绘制柱形图或柱形堆积图
bar(x,height,width=0.8,bottom=None,align=‘center’,data=None,tick_label=None,xerr=None,yerr=None,error_kw=None)
该函数的常用参数含义如下:
- x :x轴坐标数据
- height :柱形的高度
- width :柱形的宽度
- bottom :柱形底部的y坐标值,默认为0
- align :柱形的对齐方式,有’center’和’edge’两种取值,'center’表示柱形与刻度线居中对齐,'edge’表示柱形左边与刻度线对齐
- tick_label :柱形对应的刻度标签
- xerr,yerr :水平和垂直误差棒
案例:学生各科成绩柱形图
import numpy as np
import matplotlib.pyplot as plt
x=np.arange(6)
male_grades=np.array([85.5,91,72,59,66,55])
female_grades=np.array([94,82,89.5,62,49,53])
bar_width=0.3
plt.bar(x,male_grades,tick_label=['语文','数学','英语','物理','化学','生物'],width=bar_width,label='Male')
plt.bar(x+bar_width,female_grades,width=bar_width,label='Female')
plt.rcParams['font.sans-serif'] = ['SimHei']#设置中文字体黑体,没有plt.rcParams中文显示不出来
plt.xlabel('Subject')#设置x轴标签
plt.ylabel('Avg_grades')#设置y轴标签
plt.title('Bar Chart for Male and Female Scores by Subject')
plt.legend()#显示对应柱形的图例标签
plt.show()
运行结果如下图:
绘制柱形堆积图:
在女生的柱形上加一个bottom参数,设置bottom=male_grades
import numpy as np
import matplotlib.pyplot as plt
x=np.arange(6)
male_grades=np.array([85.5,91,72,59,66,55])
female_grades=np.array([94,82,89.5,62,49,53])
bar_width=0.3
plt.bar(x,male_grades,tick_label=['语文','数学','英语','物理','化学','生物'],width=bar_width,label='Male')
#注意女生柱形参数变化
plt.bar(x,female_grades,bottom=male_grades,width=bar_width,label='Female')
plt.rcParams['font.sans-serif'] = ['SimHei']#设置中文字体黑体,没有plt.rcParams中文显示不出来
plt.xlabel('Subject')
plt.ylabel('Avg_grades')
plt.title('Bar Chart for Male and Female Scores by Subject')
plt.legend()
plt.show()
运行结果如下图:
三、使用barh()绘制条形图和堆积条形图
barh(y,width,height,=0.8,left=None,align=‘center’)
该函数的常用参数含义如下:
- y:表示条形的y坐标值
- width:条形的宽度,默认为0.8
- height:条形的高度
- left:条形左侧的x坐标值,默认为0
- 条形的对齐方式,有’center’和’edge’两种方式,表示居中和条形底边与刻度线对齐
案例:南北方生物体型差异
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
# 根据多组数据绘制条形图
plt.barh(y, x1, tick_label=['a', 'b', 'c', 'd', 'e'], height=bar_height)
plt.barh(y+bar_height, x2, height=bar_height)
plt.show()
运行结果如下图:
绘制条形堆积图:
在第二个条形图上加一个left参数,设置left=x1
plt.barh(y, x1, tick_label=['a', 'b', 'c', 'd', 'e'], height=bar_height)
#注意看参数变化
plt.barh(y, x2, left=x1, height=bar_height)
plt.show()
四、使用stackplot()绘制堆积面积图
stackplot(x,y,labels=(),data=None)
该函数常用参数含义如下:
- x :x轴的数据,可以是一维数组
- y :y轴的数据,可以是二维数组或一维数组序列
- labels :每组折线及填充区域的标签
案例:物流公司物流费用统计
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])
# 绘制堆积面积图
plt.stackplot(x, y1, y2, y3)
plt.show()
五、使用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)
该函数常用参数含义如下:
- x :x轴的数据,可以是单个数组或多个数组
- bins :矩形条的个数,默认为10
- range :数据的范围,若没有提供range参数的值,则范围为(x.min(),x.max())
- cumulative :是否计算累计频数或频率
- histtyype :直方图的类型,有’bar’,‘barstacked’,‘step’,'stepfilled’四种取值,bar表示传统直方图为默认值,barstacked表示堆积直方图,step表示未填充的线条直方图,stepfilled表示填充的线条直方图
- align :矩形条边界对齐方式,有’left’,‘mid’,‘right’三种取值,默认为’mid’
- orentation :矩形条的摆放方式,默认为’vertical’及垂直方向
- rwidth :矩形条宽度的百分比,默认为0,若histtype参数的值为’step’或’stepfilled’,则直接忽略rwidth参数的值
- stacked :是否将多个矩形条以堆积形式摆放
案例:人脸识别的灰度直方图
import matplotlib.pyplot as plt
import numpy as np
# 10000 个随机数
random_state = np.random.RandomState(19680801)
random_x = random_state.randn(10000)
# 绘制包含 25个矩形条的直方图
plt.hist(random_x, bins=25)
plt.show()
运行结果如下图所示:
六、使用pie()绘制饼图或圆环图
pie(x,explode = None,autopct = None,pctdistance = 0.6,shadow = Flase,labeldistance = 1.1,startangle = None,radius = None,counterclock = True)
该函数部分参数含义如下:
- x:扇形或楔形的数据
- explode:扇形或楔形离开圆心的距离
- labels:扇形或楔形对应的标签文本
- autopct:控制扇形或楔形的数值显示的字符串,可通过格式字符串指定小数点后的位数
- pctdstance:扇形或楔形对应的数值标签距离圆心的比例,默认为0.6
- shadow:是否显示阴影
- labeldistance:标签文本的绘制位置(相对于半径的比例),默认为1.1
- startangle:起始绘制角度,默认从x轴得正方向逆时针绘制
- redius:扇形或楔形的半径
案例:分别绘制饼图和圆环图
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'])
# 绘制饼图:半径为 0.5,数值保留1位小数
plt.pie(data, radius=0.5, labels=pie_labels, autopct='%3.1f%%')
plt.show()
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'])
# 绘制圆环图:外圆半径为1.5,楔形宽度为0.7
plt.pie(data, radius=1.5, wedgeprops={'width': 0.7}, labels=pie_labels,
autopct='%3.1f%%', pctdistance=0.75)
plt.show()
运行结果如下图:
七、使用scatter()绘制散点图或气泡图
scatter(x,y,s=Nome,marker=None)
该函数常用参数含义如下:
- x,y :数据点的位置
- s :数据点的大小
- c :数据点的颜色
- marker :数据点的样式,默认圆形
当传入s参数且不固定时即为气泡图
案例:分子运动
#散点图
num = 50
x = np.random.rand(num)
y = np.random.rand(num)
plt.scatter(x, y)
#气泡图
num = 50
x = np.random.rand(num)
y = np.random.rand(num)
area = (30 * np.random.rand(num)) **2
plt.scatter(x, y, s=area)
运行结果如下图:
八、使用boxplot()绘制箱型图
boxplot(x,notch = None,sym = None,vert = None,whis = None,positions = None,widths = None,patch_artist = None)
该函数常用参数含义如下:
- x:绘制箱型图的数据
- sym:表示异常值对应的符号,默认为空心圆圈
- vert:表示是否将箱型图垂直摆放,默认为垂直摆放
- whis:宝石箱型图上下须与上下四分位的距离,默认为1.5倍的四分位差
- positions:表示箱体的位置
- widths:表示箱体的宽度,默认为0.5
案例:2017年和2018年全国发电量统计
import numpy as np
import matplotlib.pyplot as plt
#设置字体为黑体
plt.rcParams['font.family'] = 'SimHei'
data_2018 = np.array([5200, 5254.5, 5283.4, 5107.8, 5443.3, 5550.6,
6400.2, 6404.9, 5483.1, 5330.2, 5543, 6199.9])
data_2017 = np.array([4605.2, 4710.3, 5168.9, 4767.2, 4947, 5203,
6047.4, 5945.5, 5219.6, 5038.1, 5196.3, 5698.6])
# 绘制箱形图
plt.boxplot([data_2018, data_2017], labels=('2018年', '2017年'),
meanline=True, widths=0.5, vert=False, patch_artist=True)
plt.show()
九、使用polar()绘制雷达图
polar(theta,r)
该函数参数含义如下:
- theta:表示每个数据点所在射线与极径的夹角
- r:表示每个数据点到原点的距离
案例:兴趣测试
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
dim_num = 6
data = np.array([[0.40, 0.32, 0.35, 0.30, 0.30, 0.88],
[0.85, 0.35, 0.30, 0.40, 0.40, 0.30],
[0.43, 0.89, 0.30, 0.28, 0.22, 0.30],
[0.30, 0.25, 0.48, 0.85, 0.45, 0.40],
[0.20, 0.38, 0.87, 0.45, 0.32, 0.28],
[0.34, 0.31, 0.38, 0.40, 0.92, 0.28]])
angles = np.linspace(0, 2 * np.pi, dim_num, endpoint=False)
angles = np.concatenate((angles, [angles[0]]))
data = np.concatenate((data, [data[0]]))
# 维度标签
radar_labels = ['研究型(I)', '艺术型(A)', '社会型(S)',
'企业型(E)', '传统型(C)', '现实型(R)']
radar_labels = np.concatenate((radar_labels, [radar_labels[0]]))
# 绘制雷达图
plt.polar(angles, data)
# 设置极坐标的标签
plt.thetagrids(angles * 180/np.pi, labels=radar_labels)
# 填充多边形
plt.fill(angles, data, alpha=0.25)
plt.show()
运行结果如下图: