matplotlib绘图函数详解

本文详细介绍了如何使用Matplotlib库中的plot(),bar(),barh(),stackplot(),hist(),pie(),scatter(),boxplot(),和polar()函数在Python中创建折线图、柱状图、堆积图、直方图、饼图、散点图、箱型图和雷达图。通过实例展示了如何用这些函数来展示气温变化、学生成绩、生物体型差异、物流费用、人脸识别、兴趣测试等数据。
摘要由CSDN通过智能技术生成


先将其导入:

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()

运行结果如下图:
在这里插入图片描述

  • 49
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值