plt基础函数与折线图
参考举例:Matplotlib 菜鸟教程
# 必备头文件
import numpy as np
import matplotlib.pyplot as plt
import random
from mpl_toolkits.axes_grid1 import host_subplot # 多个坐标轴
from matplotlib.pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 生成中文
matplotlib.rcParams['axes.unicode_minus'] =False # 生成“-”负号
1. 生成数据,运用文件
- 随机数:
random
的使用- 生成小数:
random.uniform(a, b)
- 生成整数:
random.randint(a, b)
- 生成小数:
- txt文件:文件更多操作
- 保存文件:
f = open(file_path + "/name.txt", "w")
- 读取文件:
f = open(file_path + "/name.txt", "r")
或with (file_path + "/name.txt", "w") as f:
- 写入操作:
f.write(str)
或f.writeline(str)
- 读取操作:读取全部
f.read()
,读取每行f.readline()
,读取全部按行形成listf.readlines()
- 按照
"x"
拆分:line.split("x")
- 字符串转数字:转整数
int()
,转小数float()
- 小数保留5位:
round(x, 5)
- 按照
- 保存文件:
# 准备数据并存入文件
def Create_Date():
x = range(1, 61, 1)
y1 = [random.uniform(0, 50) for i in x] # 小数
y2 = [random.randint(20, 80) for i in x] # 整数
with open(file_path + "/data_plot.txt", "w") as f:
for i in range(len(x)):
f.write(str(x[i]) + ' ')
f.write(str(y1[i]) + ' ')
f.write(str(y2[i]) + '\n')
# f.writelines(str(x[i]) + ' ' + str(y1[i]) + ' ' + str(y2[i]) + '\n')
f.close()
# 读取数据
def Read_Data():
f = open(file_path + "/data_plot.txt", "r")
x, y1, y2 = [], [], []
line = f.readline()
while line:
tmp = line.split() # 按照空格拆分
x.append(int(tmp[0]))
y1.append(round(float(tmp[1]), 5))
y2.append(int(tmp[2]))
line = f.readline()
f.close()
return x, y1, y2
2. 基础操作,plot折线图
-
创建画布:
plot.figure()
-
默认操作:
plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)
-
参数解释:
参数 解释 num 图像编号(int)或名称(str) figsize 指定宽和高(英寸) dpi 分辨率(数字越高分辨率越小) facecolor 背景颜色 edgecolor 边框颜色 frameon 是否显示边框
-
-
绘制点线:
plt.plot()
-
可传入tuple(), list[], np.array, pd.Series
-
格式控制字符串fmt:包括三部分颜色,点型,线型。基本格式
fmt = '[marker][line][color]'
plt.plot(x,y,"ob:") # "b"为蓝色, "o"为圆点, ":"为点线
-
参数解释:更多参数
参数 解释 color(简写c) 线颜色 linewidth(简写lw) 线宽 linestyle(简写ls) 线型 marker 点型 markersize(简写ms) 点尺寸 markerfacecolor(简写mfc) 点填充颜色 markeredgewidth(简写mew) 点边缘宽度 markeredgecolor(简写mec) 点边缘颜色 - 常见颜色:
color=['b','g','r','c','m','y','k','w']
- 常见线型:
linestyle=['-','--','-.',':']
- 常见点型:
marker=['.',',','o','v','^','<','>','1','2','3','4','s','p','*','h','H','+','x','D','d','|','_','.',',']
- 常见颜色:
-
-
坐标轴作图范围:
plt.xlim(), plt.ylim()
- 修改两端:
plt.xlim((xmin, xmax))
- 修改一端:
plt.xlim(right=...)
- 修改两端:
-
坐标轴刻度内容:
plt.xticks(),plt.yticks()
-
完全不显示:
plt.xticks([])
-
参数解释:
参数 解释 ticks 实际刻度(列表)——数字 labels 显示刻度(列表)——字符串 rotation 显示文字旋转度数
注意:在
xlim
范围比xticks
大时,多余部分没有刻度内容;在xticks
范围比xlim
大时,按照xticks
的范围显示刻度 -
-
网格线:
plt.grid()
-
默认操作:
matplotlib.pyplot.grid(b=None, which='major', axis='both', **kwargs)
-
参数解释:
参数 解释 可选参数 b 是否显示网格线 布尔值 axis 哪个方向的网格线 ['both', 'x', 'y']
which 应用更改的网格线 ['both', 'major', 'minor']
color(简写c) 线颜色 linewidth(简写lw) 线宽 linestyle(简写ls) 线型 alpha 透明度
-
-
轴标签:
plt.xlabel()
-
默认操作:
xlabel(xlabel, fontdict=None, labelpad=None, *, loc=None, **kwargs)
-
参数解释:
参数 解释 xlabel 标签内容(str) labelpad 标签离轴的偏移量(float) loc 标签位置 fontdict 设置标签的字体样式 - 可选位置:
loc = x轴['left', 'center', 'right'] or y轴['bottom', 'center', 'top']
- 可选位置:
-
-
标题:
plt.title()
-
参数解释:
参数 解释 可选参数 label 标签内容 str fontsize 字体大小(默认12) ['xx-small', 'x-small', 'small', 'medium', 'large','x-large', 'xx-large']
fontweight 字体粗细 ['light', 'normal', 'medium', 'semibold', 'bold', 'heavy', 'black']
fontstyle 字体类型 ['normal', 'italic'斜体, 'oblique'倾斜]
verticalalignment 垂直对齐方式 ['center', 'top', 'bottom', 'baseline']
horizontalalignment 水平对齐方式 ['left', 'right', 'center']
rotation 旋转角度 vertical,horizonta或数字 alpha 透明度 0至1之间 backgroundcolor 标题背景颜色 bbox 标题外框 boxstyle方框外形,facecolor(简写fc)背景颜色,edgecolor(简写ec)边框线条颜色,edgewidth边框线条大小 y 竖直位置 y<0在图片下方,y>1在图片上方 loc 标题位置
-
-
保存图片:
plt.savefig(path)
-
显示:
plt.show()
3. 实例
- 完整代码:
import numpy as np
import matplotlib.pyplot as plt
import random
file_path = "D:/2Codefield/VS_code/python/Learn_Base/PLT"
# 准备数据并存入文件
def Create_Date():
# 准备数据
x = range(0, 60, 1)
y1 = [random.uniform(-20, 20) for i in x] # 小数
y2 = [random.randint(10, 50) for i in x] # 整数
# 存入文件
with open(file_path + "/data_plot.txt", "w") as f:
for i in range(len(x)):
f.write(str(x[i]) + ' ')
f.write(str(y1[i]) + ' ')
f.write(str(y2[i]) + '\n')
# f.writelines(str(x[i]) + ' ' + str(y1[i]) + ' ' + str(y2[i]) + '\n')
f.close()
# 读取数据
def Read_Data():
# 读取数据
f = open(file_path + "/data_plot.txt", "r")
x, y1, y2 = [], [], []
line = f.readline()
while line:
tmp = line.split() # 按照空格拆分
x.append(int(tmp[0]))
y1.append(round(float(tmp[1]), 5))
y2.append(int(tmp[2]))
line = f.readline()
f.close()
return x, y1, y2
# 绘制折线图
def Draw_Plot(x, y1, y2):
# figure创建画布
plt.figure(num=1, figsize=(12, 8), facecolor='y', edgecolor='g', dpi=80)
# plot绘制点线
plt.plot(x, y1, c="blue", ls='dotted', lw=2, marker="o", ms=5, mfc="red", mew=1, mec="grey")
plt.plot(x, y2, "*-g")
# xlim坐标轴作图范围
plt.xlim((0,60))
plt.ylim((-20,50))
# xticks坐标轴刻度范围
x_label = ['11:0{}'.format(i) if i < 10 else '11:{}'.format(i) for i in x]
plt.xticks(range(0, 60, 5), x_label[::5], rotation=30)
z = range(-20, 55)
plt.yticks(ticks=z[::5]) # 5是步长
# grid设置网格信息
plt.grid(axis='y', color='r', linestyle='--', linewidth=0.5, alpha=0.5)
# xlabel添加坐标轴标签
plt.xlabel('Time', labelpad=10, loc='left')
plt.ylabel('Temperature', loc='center',
fontdict={'fontsize':30, 'fontstyle':'oblique', 'color':'red', 'fontfamily':'fantasy'}) #设置标签字体字典
# title添加标题
tit = 'Curve of Temperature Change with Time'
plt.title(label=tit, fontweight='black', loc='right', verticalalignment='top',
alpha=0.5, rotation=5, bbox=dict(fc='y', ec='blue'))
# 保存图片,并展示
plt.savefig(file_path + '/test_plot.png')
plt.show()
if __name__ == '__main__':
Create_Date()
x, y1, y2 = Read_Data()
Draw_Plot(x, y1, y2)
- 生成图片:不要在意美观,纯粹为了尝试函数参数