介绍
在官网上有更多种类的图型的绘制方法
matpoltlib中文官方文档:例子_Matplotlib 中文网
matpoltlib英文官方文档:Examples — Matplotlib 3.8.1 documentation
分类
一、折线图
1、要实现的功能:
2、实例:
# 导入包
from matplotlib import pyplot as plt
#这句话还可以用:from matplotlib import pyplot as plt# 创建数据
x = range(2, 26, 2)
y = [15, 13, 14.5, 17, 20, 25, 26, 26, 27, 22, 18, 15]
y2 = [1, 0, 11, 12, 13, 14, 3, 10, 1, 1, 1, 2]# 设置图片尺寸和清晰度,dpi表示分辨率,即每英寸的点数,默认80
plt.figure(figsize=(20, 8), dpi=200)# 绘制折线图
plt.plot(x, y, label='line_1')
plt.plot(x, y2, label='line_2', color='r', linestyle="--", linewidth=5, alpha=0.5)#设置线颜色、线条样式、线条宽度、线条透明度# 设置曲线标签;需要先在plot函数中设置label参数,
plt.legend() # 默认标签显示在右上角;对参数loc赋值可使label显示在不同位置# 设置x、y轴刻度(数字的情况下)
xticks_labels = [i/2 for i in range(2, 50)]
plt.xticks(xticks_labels)
plt.yticks(range(0, max(y)+1))
# 设置x、y刻度(字符串情况下);传入两个参数,都为列表形式,两个列表对应;rotation代表旋转角度
plt.xticks(xticks_labels, [f"No.{i}" for i in xticks_labels], rotation = 45)# 添加标题和标签
plt.title('Simple Line Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')# 设置网格
plt.grid()
# plt.grid(alpha = 0.2) #参数alpha表示网格透明度# 保存图片
plt.savefig("./t1.png")
plt.savefig("./t2.svg") # .svg矢量图格式,放大不会有锯齿# 显示图形
plt.show()
3、逐句解释:
(1)导入包
# 导入包
from matplotlib import pyplot as plt
#这句话还可以用:from matplotlib import pyplot as plt
(2)创建数据
# 创建数据
x = range(2, 26, 2)
y = [15, 13, 14.5, 17, 20, 25, 26, 26, 27, 22, 18, 15]
y2 = [1, 0, 11, 12, 13, 14, 3, 10, 1, 1, 1, 2]
(3)设置图片尺寸和清晰度,dpi表示分辨率,即每英寸的点数,默认80
# 设置图片尺寸和清晰度,dpi表示分辨率,即每英寸的点数,默认80
plt.figure(figsize=(20, 8), dpi=200)
(4)绘制折线图,plot中,参数可以设置:“ 线条颜色、线条样式、线条宽度、线条透明度 ”
# 绘制折线图
plt.plot(x, y, label='line_1')
plt.plot(x, y2, label='line_2', color='r', linestyle="--", linewidth=5, alpha=0.5)#设置线颜色、线条样式、线条宽度、线条透明度
(5)在一个表中显示多个折线图,多次调用plot函数绘图即可,可用 legend 生成图例,不同折线标签是由 plot 中的 label 参数设置,legend 中参数可设置标签的各项特点。
# 设置曲线标签;需要先在plot函数中设置label参数,
plt.legend() # 默认标签显示在右上角;对参数loc赋值可使label显示在不同位置
(6)设置x、y轴的刻度,数字情况是传入一个列表参数,字符串情况是传入两个相互对应的列表参数
# 设置x、y轴刻度(数字的情况下)
xticks_labels = [i/2 for i in range(2, 50)]
plt.xticks(xticks_labels)
plt.yticks(range(0, max(y)+1))
# 设置x、y刻度(字符串情况下);传入两个参数,都为列表形式,两个列表对应;rotation代表旋转角度
plt.xticks(xticks_labels, [f"No.{i}" for i in xticks_labels], rotation = 45)
(7)设置标题和x、y轴标签
# 添加标题和标签
plt.title('Simple Line Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
(8)设置网格,alpha参数代表网格透明度,范围0-1
# 设置网格
plt.grid()
# plt.grid(alpha = 0.2) #参数alpha表示网格透明度
(9)保存图片,svg矢量图格式可以防止放大图线后出现模糊
# 保存图片
plt.savefig("./t1.png")
plt.savefig("./t2.svg") # .svg矢量图格式,放大不会有锯齿
(10)显示图线
# 显示图形
plt.show()
二、散点图
将 plot() 换成 scatter() 即可。其余与折线图完全一样。
三、条形图
1、竖着的条形图
from matplotlib import pyplot as plta = ["no1", "no2", "no3", "no4", "no5", "no6", "no7", "no8", "no9"]
b = [56.1, 26.94, 17.53, 16.49, 15.45, 12.96, 11.8, 11.61, 11]# 设置图形大小
plt.figure(figsize=(20, 8), dpi=80)# 绘制条形图
plt.bar(range(len(a)), b, width=0.3)# 设置字符串到x轴
plt.xticks(range(len(a)), a, rotation=90)plt.show()
2、横着的条形图
from matplotlib import pyplot as plta = ["no1", "no2", "no3", "no4", "no5", "no6", "no7", "no8", "no9"]
b = [56.1, 26.94, 17.53, 16.49, 15.45, 12.96, 11.8, 11.61, 11]# 设置图形大小
plt.figure(figsize=(20, 8), dpi=80)# 绘制条形图
plt.barh(range(len(a)), b, height=0.3)# 设置字符串到x轴
plt.yticks(range(len(a)), a)plt.show()
3,区别
(1)竖图和横图用的绘图函数分别为 bar() 和 barh() ,
(2)若竖图设置的是x轴,其对应的横图就应该设置y轴。
(3)竖图设置条的宽度用width参数,横图用height参数
四、直方图
用 hist() 绘制直方图,参数density默认为False,表示绘制频率分布直方图,设置为True 表示绘制概率分布直方图(面积归一化)
from matplotlib import pyplot as plta = [112,134,173,156,88,93,140,150,130,133,122,123,132,145,154,154,154,123,165,147,99,95,149,120,123,93,92,154,123,134,135,154,153,133,122,123,154,145,134,145,164,163,162,166,126,134,143,155,156,167,133,134,155,159,158,138,139,134,137,147,148,149,133,134,144,134,143,133,170,167,145,123,134,165,122,102,101,100,102,103,103,104,105,106,107,148,109,112,113,114,115,112,111,111,110,114,113,123,133,116]d = 5 # 组距
num_bins = (max(a)-min(a))//d
print(len(a), max(a), min(a), max(a)-min(a))
print(num_bins)# 设置图形大小
plt.figure(figsize=(20, 8), dpi=80)
plt.hist(a, num_bins, density=True) # density设置为True表示概率分布直方图(面积归一化),默认density为False,为频率分别直方图# 设置x轴刻度
plt.xticks(range(min(a), max(a)+d, d))plt.grid()plt.show()
hist() 中第二个参数若为一个数字num,则代表平均分为num组,若为一个列表,则可以按照列表分组,这个列表中的数代表的并不是比例,而是横坐标的数字,如将上代码中的 hist() 的第二个参数改为 [60,70,80,90,100,125,155,160,170,180],可得到:
此时应更改横坐标也为[60,70,80,90,100,125,155,160,170,180]