[Introducción a la inteligencia artificial] Visualización china de dibujos de pyplot, marcado punto por punto, guardado de imágenes y dibujo de subgrafos
Directorio de artículos
- [Introducción a la inteligencia artificial] Visualización china de dibujos de pyplot, marcado punto por punto, guardado de imágenes y dibujo de subgrafos
- 1. Dibujo sencillo
- 2. Visualización de coordenadas punto por punto
- 3. exhibición china
- 4. Problemas que puede encontrar al mostrar chino: falta de fuentes
- 5. Guarda la imagen
- 6. Dibujo de subimagen
1. Dibujo sencillo
- Código:
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() # 显示图片
- Representación:
2. Visualización de coordenadas punto por punto
- Si solo tiene el diagrama seco de arriba, la legibilidad será muy pobre, por lo que también puede mostrar las coordenadas de los puntos del dibujo punto por punto.
- Código:
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() # 显示图片
- Representación:
3. exhibición china
- Matplotlib muestra inglés de forma predeterminada. Si no realiza configuraciones relevantes e intenta generar chino directamente, solo obtendrá un montón de cuadrados confusos.
- De hecho, solo necesita agregar dos declaraciones para lograr la visualización en chino, de la siguiente manera:
# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
- Código:
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() # 显示图片
- Representación:
4. Problemas que puede encontrar al mostrar chino: falta de fuentes
- Al configurar la visualización en chino por primera vez, puede encontrar el siguiente problema:
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
, lo que significa que Matplotlib carece de la fuente SimHei. - Esto requiere que descarguemos SimHei.ttf y configuremos Matplotlib.
4.1 Descargar SimHei.ttf
- levemente
4.2 Copie SimHei.ttf a la carpeta font/ttf de Matplotlib
- Ejecute el siguiente código:
import matplotlib
print(matplotlib.matplotlib_fname())
- Obtendrá una dirección que termina en matplotlibrc similar a la siguiente:
/home/nombre de usuario/anaconda3/envs/nombre del entorno/lib/python3.10/site-packages/matplotlib/mpl-data/matplotlibrc
- Según esta ruta, obtenga la ruta de almacenamiento del archivo ttf:
/home/nombre de usuario/anaconda3/envs/nombre del entorno/lib/python3.10/site-packages/matplotlib/mpl-data/font/ttf
- Mueva el archivo ttf descargado aquí.
4.3 Modificar la configuración de Matplotlib
- Ejecute el siguiente código:
import matplotlib
print(matplotlib.matplotlib_fname())
- Obtendrá una dirección similar a la siguiente que termina en matplotlibrc, que es el archivo de configuración de Matplotlib:
/home/nombre de usuario/anaconda3/envs/nombre del entorno/lib/python3.10/site-packages/matplotlib/mpl-data/matplotlibrc
- Ingrese el siguiente comando en la terminal para abrir el archivo de configuración:
gedit /home/用户名/anaconda3/envs/环境名/lib/python3.10/site-packages/matplotlib/mpl-data/matplotlibrc
- Realice los siguientes tres cambios
Modificación 1: elimine el signo # antes de font.family;
Modificación 2: elimine el signo # antes de font.sans-serif y agregue SimHei;
Modificación 3: elimine el signo # antes de axes.unicode_minus y cambie su valor a Falso.
- antes de arreglar:
#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
- Después de la modificación:
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 Borrar configuración original
- Ejecute las siguientes instrucciones para obtener la ubicación del archivo caché de Matplotlib:
import matplotlib
print(matplotlib.get_cachedir())
- Obtenga resultados similares a los siguientes:
/home/nombre de usuario/.cache/matplotlib
- Ejecute el siguiente comando en la terminal para borrar los archivos de caché
rm -r /home/用户名/.cache/matplotlib
4.5 Hecho
- Reinicie el editor y ejecute el código:
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() # 显示图片
- Representación:
- Efectivamente, la magia se logró.
5. Guarda la imagen
5.1 Guardar una sola imagen
- Simplemente agregue la siguiente directiva:
plt.savefig('./image/pic.png')
5.2 Guardar varias imágenes
- Entre los códigos que generan diferentes imágenes, agregue una declaración adicional para restablecer plt para evitar el alias de imágenes:
plt.clf()
- Ejemplo de código:
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. Dibujo de subimagen
- Código:
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()
- Representación: