资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 后端开发 > Python

【人工智能概论】pyplot作图中文显示、逐点坐标显示、保存图像

Python 更新时间: 发布时间: 计算机考试归档 最新发布

【人工智能概论】pyplot作图中文显示、逐点坐标显示、保存图像

【人工智能概论】pyplot作图中文显示、逐点标记、保存图像

文章目录

  • 【人工智能概论】pyplot作图中文显示、逐点标记、保存图像
  • 一. 简单的绘图
  • 二. 逐点坐标显示
  • 三. 中文显示
  • 四. 中文显示可能遇到的问题——缺少字体
    • 4.1 下载 SimHei.ttf
    • 4.2 复制 SimHei.ttf 到 Matplotlib 的 font/ttf 文件夹
    • 4.3 修改 Matplotlib 配置
    • 4.4 清空原有配置
    • 4.5 大功告成
  • 五. 保存图像
    • 5.1 保存单张图片
    • 5.2 保存多张图片

一. 简单的绘图

  • 代码:
import numpy as npimport matplotlib.pyplot as pltx = np.arange(10)  # 用numpy生成x坐标点y = x * x + x - 3# 生成y坐标的值plt.title("y = x^2 + x - 3")  # 设置标题plt.xlabel("x")  # 设置x坐标标签plt.ylabel("y")  # 设置y坐标标签plt.plot(x, y)  # 绘图plt.show()  # 显示图片
  • 效果图:

二. 逐点坐标显示

  • 如果只有上面的那种干巴巴的图,可读性会很差,因此不妨将绘图的点,逐点进行坐标展示。
  • 代码:
import numpy as npimport matplotlib.pyplot as pltx = np.arange(10)  # 用numpy生成x坐标点y = x * x + x - 3# 生成y坐标的值plt.xlabel("x")  # 设置x坐标标签plt.ylabel("y")  # 设置y坐标标签plt.title("y = x^2 + x - 3")  # 设置标题plt.plot(x, y, color='r', markerfacecolor='blue', marker='o')  # 绘图for a, b in zip(x, y):  # 添加这个循环显示坐标    plt.text(a, b, (a, b), ha='center', va='bottom', fontsize=10)plt.show()  # 显示图片
  • 效果图:

三. 中文显示

  • Matplotlib默认显示英文,如果不进行相关设定,妄图直接输出中文,收获的只能是一堆方块乱码。
  • 实际上只需要加两条语句即可实现中文显示,如下:
# 解决中文显示问题plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
  • 代码:
import numpy as npimport matplotlib.pyplot as pltx = np.arange(10)  # 用numpy生成x坐标点y = x * x + x - 3# 生成y坐标的值plt.title("一元二次方程")  # 设置标题# 解决中文显示问题plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题plt.xlabel("x")  # 设置x坐标标签plt.ylabel("y")  # 设置y坐标标签plt.plot(x, y, color='r', markerfacecolor='blue', marker='o')  # 绘图for a, b in zip(x, y):  # 添加这个循环显示坐标    plt.text(a, b, (a, b), ha='center', va='bottom', fontsize=10)plt.show()  # 显示图片
  • 效果图:

四. 中文显示可能遇到的问题——缺少字体

  • 在初次设定中文显示时,可能会遇到这样的问题:findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei,这说明Matplotlib缺少SimHei字体。
  • 这就需要我们下载SimHei.ttf ,并配置Matplotlib。

4.1 下载 SimHei.ttf

4.2 复制 SimHei.ttf 到 Matplotlib 的 font/ttf 文件夹

  • 执行以下代码:
import matplotlibprint(matplotlib.matplotlib_fname())
  • 会得到类似如下以 matplotlibrc 结尾的地址:

/home/用户名/anaconda3/envs/环境名/lib/python3.10/site-packages/matplotlib/mpl-data/matplotlibrc

  • 以此路径为基础,获得ttf文件的存放路径:

/home/用户名/anaconda3/envs/环境名/lib/python3.10/site-packages/matplotlib/mpl-data/font/ttf

  • 将下载好的ttf文件移动到此。

4.3 修改 Matplotlib 配置

  • 执行以下代码:
import matplotlibprint(matplotlib.matplotlib_fname())
  • 会得到类似如下以 matplotlibrc 结尾的地址,它就是Matplotlib的配置文件:

/home/用户名/anaconda3/envs/环境名/lib/python3.10/site-packages/matplotlib/mpl-data/matplotlibrc

  • 终端中输入以下指令,打开配置文件:
gedit /home/用户名/anaconda3/envs/环境名/lib/python3.10/site-packages/matplotlib/mpl-data/matplotlibrc
  • 做以下三点修改

修改1:去掉 font.family 前的 # 号;
修改2:去掉 font.sans-serif 前的 # 号,并加入 SimHei ;
修改3:去掉 axes.unicode_minus 前的 # 号,并将其值修改为 False。

  • 修改前:
#font.family:  sans-serif#font.serif:      DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif#axes.unicode_minus: True # use Unicode for the minus symbol rather than hyphen.  See                           # https://en.wikipedia.org/wiki/Plus_and_minus_signs#Character_codes
  • 修改后:
font.family:  sans-seriffont.serif:      SimHei, DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serifaxes.unicode_minus: False # use Unicode for the minus symbol rather than hyphen.  See                           # https://en.wikipedia.org/wiki/Plus_and_minus_signs#Character_codes

4.4 清空原有配置

  • 执行以下指令,获得Matplotlib的缓存文件位置:
import matplotlibprint(matplotlib.get_cachedir())
  • 得到类似下面的结果:

/home/用户名/.cache/matplotlib

  • 终端执行以下指令,清除缓存文件
rm -r  /home/用户名/.cache/matplotlib

4.5 大功告成

  • 重启编辑器,执行代码:
import numpy as npimport matplotlib.pyplot as pltx = np.arange(10)  # 用numpy生成x坐标点y = x * x + x - 3# 生成y坐标的值plt.title("一元二次方程")  # 设置标题# 解决中文显示问题plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题plt.xlabel("x")  # 设置x坐标标签plt.ylabel("y")  # 设置y坐标标签plt.plot(x, y, color='r', markerfacecolor='blue', marker='o')  # 绘图for a, b in zip(x, y):  # 添加这个循环显示坐标    plt.text(a, b, (a, b), ha='center', va='bottom', fontsize=10)plt.show()  # 显示图片
  • 效果图:
  • 果然神功大成。

五. 保存图像

5.1 保存单张图片

  • 只需添加以下指令:
plt.savefig('./image/pic.png')

5.2 保存多张图片

  • 生成不同图像的代码间,要额外添加一条语句,用于重置plt,以避免图像混叠:
plt.clf()
  • 代码举例:
plt.plot(loss, 'r')plt.title("Loss")plt.xlabel("epoch")plt.ylabel("Loss")plt.savefig("loss.png")  plt.clf()  # 添加上这一行,画完第一个图后,将plt重置plt.plot(acc, 'r')plt.title("Accuracy")plt.xlabel("epoch")plt.ylabel("accuracy")plt.savefig("accuracy.png") 
转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/1095073.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【【人工智能概论】pyplot作图中文显示、逐点坐标显示、保存图像】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2