[Введение в искусственный интеллект] Китайское отображение рисунка pyplot, отображение координат по точкам, сохранение изображения, рисование подграфика

[Введение в искусственный интеллект] Отображение рисунков Pyplot на китайском языке, поточечная маркировка, сохранение изображений и рисование подграфов.


1. Простой рисунок

  • Код:
import numpy as np
import matplotlib.pyplot as plt

x = 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()  # 显示图片
  • Рендеринг:
    Вставьте сюда описание изображения

2. Поточечное отображение координат.

  • Если у вас есть только сухая диаграмма, приведенная выше, читаемость будет очень плохой, поэтому вы можете также отображать координаты точек рисования поточечно.
  • Код:
import numpy as np
import matplotlib.pyplot as plt

x = 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()  # 显示图片
  • Рендеринг:
    Вставьте сюда описание изображения

3. Китайский дисплей

  • Matplotlib по умолчанию отображает английский язык. Если вы не сделаете соответствующие настройки и попытаетесь вывести китайский язык напрямую, вы получите только кучу искаженных квадратов.
  • Фактически, вам нужно добавить всего два оператора, чтобы добиться отображения на китайском языке, а именно:
# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
  • Код:
import numpy as np
import matplotlib.pyplot as plt

x = 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()  # 显示图片
  • Рендеринг:
    Вставьте сюда описание изображения

4. Проблемы, с которыми можно столкнуться при отображении китайского языка - отсутствие шрифтов.

  • При первой настройке китайского дисплея вы можете столкнуться со следующей проблемой: 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 в папку Font/ttf Matplotlib.

  • Выполните следующий код:
import matplotlib
print(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 matplotlib
print(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-serif
font.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, serif
axes.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 matplotlib
print(matplotlib.get_cachedir())
  • Получите результаты, подобные следующим:

/home/имя пользователя/.cache/matplotlib

  • Выполните следующую команду в терминале, чтобы очистить файлы кеша
rm -r  /home/用户名/.cache/matplotlib

4.5 Готово

  • Перезапустите редактор и выполните код:
import numpy as np
import matplotlib.pyplot as plt

x = 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. Сохраните изображение

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

6. Рисование фрагментов изображения

  • Код:
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1, 2, 2)
y1 = np.sin(x)

y2 = np.cos(x)

ax1 = plt.subplot(1, 2, 1, frameon = False) # 两行一列,位置是1的子图
plt.plot(x, y1, 'b--')
plt.ylabel('y1')
plt.title("plot 1")

ax2 = plt.subplot(1, 2, 2, projection = 'polar')
plt.plot(x, y2, 'r--')
plt.ylabel('y2')
plt.xlabel('x')
plt.title("plot 2")

plt.show()
  • Рендеринг:
    Вставьте сюда описание изображения

Guess you like

Origin blog.csdn.net/qq_44928822/article/details/130635858