基础函数与折线图

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() ,读取全部按行形成list f.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)
  • 生成图片:不要在意美观,纯粹为了尝试函数参数
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值