python - resumen de aprendizaje de Matplotlib

Tabla de contenido

Un uso común de Matplotlib

1. Dibuja una imagen simple

2. Agregue elementos comunes

3. Dibuja múltiples curvas

4. Conozca la figura (lienzo)

5. Dibuja varias imágenes

6. Dibuja diagramas comunes

7. Taquigrafía de parámetros

7.1 c significa color

7.2 ls significa estilo de línea (estilo de línea)

7.3 marcador (estilo de marca)

7.4 Otras abreviaturas

2. Uso avanzado de Matplotlib

1. Agrega notas de texto

2. Dibujar imágenes en 3D

3. Importe imágenes (precios de la vivienda en California)

4. Dibuja curvas de nivel

Dibujar animación

 


Matplotlib es una biblioteca de trazado de Python basada en NumPy. Es una herramienta para la visualización de datos en el aprendizaje automático.

Matplotlib tiene propiedades de herramienta sólidas, lo que significa que es solo para mi uso, no necesitamos gastar demasiada energía para refinarlo.

Solo necesitamos saber qué puede hacer, qué gráficos se pueden dibujar y una impresión es suficiente.

Sea lo que sea que usemos en el uso real, seremos competentes cuando lo usemos.

Un uso común de Matplotlib

1. Dibuja una imagen simple

Tomemos como sigmoidejemplo la función de activación más común en el aprendizaje automático , dibujémosla.

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-10,10,1000)
y = 1 / (1 + np.exp(-x))
plt.plot(x,y)
plt.show()

La fórmula de sigmoide es: El 
 método plot () muestra la tendencia entre variables y el método show () muestra la imagen.
Obtenemos la imagen como se muestra:

2. Agregue elementos comunes

Agregamos algunos elementos de referencia, y la explicación de cada función se detalla en el código.

x = np.linspace(-10,10,1000)

#写入公式
y = 1 / (1 + np.exp(-x))

#x轴范围限制
plt.xlim(-5,5)

#y轴范围限制
plt.ylim(-0.2,1.2)

#x轴添加标签
plt.xlabel("X axis")

#y轴添加标签
plt.ylabel("Y axis")

#标题
plt.title("sigmoid function")

#设置网格,途中红色虚线
plt.grid(linestyle=":", color ="red")

#设置水平参考线
plt.axhline(y=0.5, color="green", linestyle="--", linewidth=2)

#设置垂直参考线
plt.axvline(x=0.0, color="green", linestyle="--", linewidth=2)

#绘制曲线
plt.plot(x,y)

#保存图像
plt.savefig("./sigmoid.png",format='png', dpi=300)

El código anterior incluye contenido como limitar el rango de los ejes X e Y, agregar títulos y etiquetas, configurar la cuadrícula, agregar líneas de referencia, guardar imágenes, etc.
La imagen del dibujo es la siguiente:

3. Dibuja múltiples curvas

#生成均匀分布的1000个数值
x = np.linspace(-10,10,1000)

#写入sigmoid公式
y = 1 / (1 + np.exp(-x))
z = x**2
plt.xlim(-2,2)
plt.ylim(0,1)

#绘制sigmoid
plt.plot(x,y,color='#E0BF1D',linestyle='-', label ="sigmoid")

#绘制y=x*x
plt.plot(x,z,color='purple',linestyle='-.', label = "y=x*x")

#绘制legend,即下图角落的图例
plt.legend(loc="upper left")

#展示
plt.show()

Para dibujar varias imágenes, llame a multiple plot () directamente.

Nota: Si no se llama al método legend ( ) , no se dibujará la leyenda (leyenda ) en la esquina superior izquierda . El colorparámetro admite la representación hexadecimal.

4. Conozca la figura (lienzo)

En primer lugar, sabemos que la figura (lienzo), como la leyenda, que mencionamos anteriormente, es la visualización de etiquetas de línea.

La línea de puntos encerrada por la cuadrícula es la línea de referencia de la cuadrícula. Etiquetas de texto como Título / etiqueta del eje x. Esta imagen nos ayuda a tener una comprensión intuitiva de la figura.

imagen

5. Dibuja varias imágenes

Una figura puede corresponder a múltiples gráficos . Ahora intentamos dibujar múltiples imágenes en una figura.

x = np.linspace(-2*np.pi, 2*np.pi, 400)
y = np.sin(x**2)
z = 1 / (1 + np.exp(-x))
a = np.random.randint(0,100,400)
b = np.maximum(x,0.1*x)

#创建两行两列的子图像
fig, ax_list = plt.subplots(nrows=2, ncols=2)

# 'r-'其中r表示color=red,-表示linestyle='-'
ax_list[0][0].plot(x,y,'r-')
ax_list[0][0].title.set_text('sin')

ax_list[0][1].scatter(x,a,s=1)
ax_list[0][1].title.set_text('scatter')

ax_list[1][0].plot(x,b,'b-.')
ax_list[1][0].title.set_text('leaky relu')

ax_list[1][1].plot(x,z,'g')
ax_list[1][1].title.set_text('sigmoid')

#调整子图像的布局
fig.subplots_adjust(wspace=0.9,hspace=0.5)
fig.suptitle("Figure graphs",fontsize=16)
plt.show()

Entre ellos, el más crítico es el subplotsmétodo, que genera subimágenes con 2 filas y 2 columnas, y luego llamamos a cada método de dibujo en ax_list.

Entre ellos 'r-', el 'b-.'parámetro es la abreviatura del dibujo, y los siguientes párrafos de la abreviatura del parámetro se explicarán por separado.

6. Dibuja diagramas comunes

A menudo usamos gráficos para representar la relación entre los datos. Los gráficos comunes incluyen histogramas, histogramas, gráficos circulares, diagramas de dispersión, etc.

# import matplotlib.pyplot as plt
# import numpy as np
# x = np.linspace(-10,10,100)
# y = 1 / (1+np.exp(-x))
# plt.plot(x,y);
# plt.show()

#添加一些参考元素
# import numpy as np
# import matplotlib.pyplot as plt
# x = np.linspace(-10,10,1000)
# y = 1/ (1+np.exp(-x))
# #x轴范围限制
# plt.xlim(-5,5)
# #y轴范围限制
# plt.ylim(-0.2,1.2)
# # x轴添加标签
# plt.xlabel("X axis")
# #y轴添加标签
# plt.ylabel("Y axis")
# #标题
# plt.title("Sigmoid function")
#
# # 设置网格,途中红色虚线
# plt.grid(linestyle = ":",color = "red")
#
# # 设置水平参考线
# plt.axhline(y=0.5,color="green",linestyle="--",linewidth=2)
# #设置垂直参考线
# plt.axvline(x =0.0,color="green",linestyle="--",linewidth=2)
# #绘制曲线
# plt.plot(x,y)
# plt.show()
# #保存图像
# # plt.savefig("./sigmod.png",format="png",dpi=300)
#

#绘制多曲线
# import numpy as np
# import matplotlib.pyplot as plt
# #生成均匀分布的1000个数值
# x = np.linspace(-10,10,1000)
# y = 1/(1+np.exp(-x))
# z = x**2;
# plt.xlim(-2,2)
# plt.ylim(0,1)
# #绘制sigmod
# plt.plot(x,y,color="red",linestyle="-",label="sigmod")
# #绘制y = x**2
# plt.plot(x,z,color="purple",linestyle="-.",label="y=x**2")
# plt.legend(loc="upper left") #左上方角落的图例。
# plt.show()


# 绘制多图像
#一个figure是可以对应多个plot的
# import numpy as np
# import matplotlib.pyplot as plt
# x = np.linspace(-2*np.pi,2*np.pi,400)
# y = np.sin(x**2)
# z = 1/(1+np.exp(-x))
# a = np.random.randint(0,100,400)
# b = np.maximum(x,0.1*x)
# #创建两行两列的子对象
# fig ,ax_list = plt.subplots(nrows =2,ncols =2)
# # r-中r表示color = red. - 表示linestyle ='-'
# ax_list[0][0].plot(x,y,"r-")
# ax_list[0][0].title.set_text("scatter")
#
# ax_list[0][1].scatter(x,a,s=1)
# ax_list[0][1].title.set_text('scatter')
#
# ax_list[1][0].plot(x,b,'b-.')
# ax_list[1][0].title.set_text('leaky relu')
#
# ax_list[1][1].plot(x,z,'g')
# ax_list[1][1].title.set_text('sigmoid')
#
# fig.subplots_adjust(wspace=0.9,hspace=0.5)
# fig.suptitle("Figure graphs",fontsize = 16)
# fig.show()
# plt.show()
#
#

# 绘制常用图
#直方图,柱状图,饼图,散点图等
# 使绘图支持中文
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']

#plt.rcParams["font.sans_serif"]=["Microsoft YaHei"]
#创建两行两列的子对象
fig,[[ax1,ax2],[ax3,ax4],[ax5,ax6]]=plt.subplots(nrows=3,ncols=2,figsize=(8,8))
#绘制柱状图
value = (2,3,4,1,2)
index = np.arange(5)
ax1.bar(index,value,alpha = 0.4,color="b")
ax1.set_xlabel("Group")
ax1.set_ylabel("Scores")
ax1.set_title("柱状图")

#绘制直方图
h = 100 + 15*np.random.randn(437)
ax2.hist(h,bins=50)
ax2.title.set_text("直方图")

#绘制饼图pie
labels = "Frogs","CAT","yongji","Logs"
sizes =[15,30,45,10]
explode =(0,0.1,0,0)
ax3.pie(sizes,explode = explode,labels=labels,autopct='%1.1f%%',
        shadow = True,startangle = 90)
ax3.axis("equal")
ax3.title.set_text("饼图")

# 绘制棉棒图
x = np.linspace(0.5,2*np.pi,20)
y = np.random.randn(20)
ax4.stem(x,y,linefmt="-",markerfmt ="o",basefmt='-')
ax4.title.set_text("棉棒图")
#绘制气泡图scatter
a = np.random.randn(100)
b = np.random.randn(100)
ax5.scatter(a,b,s=np.power(2*a+4*b,2),c = np.random.rand(100),cmap=plt.cm.RdYlBu,marker='o')

#绘制极线图polar
fig.delaxes(ax6)
ax6 = fig.add_subplot(236,projection='polar')
r = np.arange(0,2,0.01)
theta = 2*np.pi*r
ax6.plot(theta,r)
ax6.set_rmax(2)
ax6.set_rticks([0.5,1,1.5,2])
ax6.set_rlabel_position(-22.5)
ax6.grid(True)
#调整子图像的布局
fig.subplots_adjust(wspace=1,hspace=1.2)
fig.suptitle("图形绘制", fontsize=16)
plt.show()















La imagen del dibujo es la siguiente:

7. Taquigrafía de parámetros

Debido a que matplotlib admite abreviaturas para parámetros, creo que es necesario hablar sobre las abreviaturas de cada parámetro por separado.

x = np.linspace(-10,10,20)
y = 1 / (1 + np.exp(-x))
plt.plot(x,y,c='k',ls='-',lw=5, label ="sigmoid", marker="o", ms=15, mfc='r')
plt.legend()
plt.show()

La imagen del dibujo es la siguiente:

7.1  c significa color

personaje color
'B' azul
'gramo' verde
'r' rojo
'C' cian
'metro' magenta
‘y’ amarillo
'k' negro
'w' blanco

7.2 ls significa estilo de línea (estilo de línea)

personaje descripción
'-' estilo de línea continua
'-' estilo de línea discontinua
'-.' estilo de línea de puntos y guiones
':' estilo de línea punteada
'.' marcador de punto
',' marcador de píxeles
'Los' marcador circular
'v' marcador triangular_hacia abajo
'^' marcador triangular
'<' marcador triangular_izquierdo
'>' marcador triangular_derecho
'1' marcador tri_down
'2' marcador tri_up
'3' marcador tri_left
'4' marcador tri_right
's' marcador cuadrado
'pag' marcador de pentágono
'*' marcador de estrella
'h' marcador hexagon1
'H' marcador hexagon2
'+' más marcador
'X' x marcador
'D' marcador de diamante
'D' marcador de diamante fino
'|' marcador de línea
'_' marcador de línea

7.3 marcador (estilo de marca)

El estilo de la marca se muestra a continuación:imagen

7.4 Otras abreviaturas

  1. lwRepresenta el ancho de línea (ancho de línea) , como: lw = 2.5

  2. msRepresenta el tamaño del marcador (tamaño de la marca), como: ms = 5

  3. mfcRepresenta el color de la cara del marcador (color del marcador), como: mfc = 'red'

2. Uso avanzado de Matplotlib

1. Agrega notas de texto

Podemos agregar texto, flechas y otras anotaciones en el lienzo (figura) para que la presentación de la imagen sea más clara y precisa.
Nos basamos anotaciones por llamar a annotatelos métodos .

fig, ax = plt.subplots(figsize=(8, 8))

t = np.arange(0.0, 5.0, 0.01)
s = np.cos(2*np.pi*t)

# 绘制一条曲线
line, = ax.plot(t, s)

#添加注释
ax.annotate('figure pixels',
            xy=(10, 10), xycoords='figure pixels')
ax.annotate('figure points',
            xy=(80, 80), xycoords='figure points')
ax.annotate('figure fraction',
            xy=(.025, .975), xycoords='figure fraction',
            horizontalalignment='left', verticalalignment='top',
            fontsize=20)

#第一个箭头
ax.annotate('point offset from data',
            xy=(2, 1), xycoords='data',
            xytext=(-15, 25), textcoords='offset points',
            arrowprops=dict(facecolor='black', shrink=0.05),
            horizontalalignment='right', verticalalignment='bottom')

#第二个箭头
ax.annotate('axes fraction',
            xy=(3, 1), xycoords='data',
            xytext=(0.8, 0.95), textcoords='axes fraction',
            arrowprops=dict(facecolor='black', shrink=0.05),
            horizontalalignment='right', verticalalignment='top')

ax.set(xlim=(-1, 5), ylim=(-3, 5))

La imagen del dibujo es la siguiente:

imagen

2. Dibujar imágenes en 3D

Para dibujar una imagen en 3D, debe importar la Axes3Dbiblioteca.

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import numpy as np


fig = plt.figure(figsize=(15,15))
ax = fig.gca(projection='3d')

# Make data.
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)

# Plot the surface.
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,
                       linewidth=0, antialiased=False)

# Customize the z axis.
ax.set_zlim(-1.01, 1.01)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))

# Add a color bar which maps values to colors.
fig.colorbar(surf, shrink=0.5, aspect=5)

Lo que cmapsignifica mapa de colores, utilizado para dibujar la distribución del color, el color degradado, etc. cmapUsualmente se colorbarusa en conjunto para dibujar la barra de color de la imagen.

imagen

3. Importe imágenes (precios de la vivienda en California)

Presentamos mpimgla biblioteca, para importar imágenes.
Tomemos como ejemplo los datos de precios de vivienda de California, importemos los datos de precios de vivienda de California para dibujar un diagrama de dispersión e importe imágenes de mapas de California para ver los datos de precios de vivienda correspondientes a la latitud y longitud del mapa. Al mismo tiempo, utilice la barra de colores para dibujar la imagen térmica.
el código se muestra a continuación:

import os
import urllib
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

#加州房价数据(大家不用在意域名)
housing = pd.read_csv("http://blog.caiyongji.com/assets/housing.csv")
#加州地图
url = "http://blog.caiyongji.com/assets/california.png"
urllib.request.urlretrieve("http://blog.caiyongji.com/assets/california.png", os.path.join("./", "california.png"))
california_img=mpimg.imread(os.path.join("./", "california.png"))

#根据经纬度绘制房价散点图
ax = housing.plot(kind="scatter", x="longitude", y="latitude", figsize=(10,7),
                       s=housing['population']/100, label="Population",
                       c="median_house_value", cmap=plt.get_cmap("jet"),
                       colorbar=False, alpha=0.4,
                      )
plt.imshow(california_img, extent=[-124.55, -113.80, 32.45, 42.05], alpha=0.5,
           cmap=plt.get_cmap("jet"))
plt.ylabel("Latitude", fontsize=14)
plt.xlabel("Longitude", fontsize=14)

prices = housing["median_house_value"]
tick_values = np.linspace(prices.min(), prices.max(), 11)

#颜色栏,热度地图
cbar = plt.colorbar(ticks=tick_values/prices.max())
cbar.ax.set_yticklabels(["$%dk"%(round(v/1000)) for v in tick_values], fontsize=14)
cbar.set_label('Median House Value', fontsize=16)
v
plt.legend(fontsize=16)

La imagen del dibujo es la siguiente: el
rojo es caro, el azul es barato, el tamaño del círculo indica la poblaciónimagen

4. Dibuja curvas de nivel

Las líneas de contorno son útiles para dibujar imágenes tridimensionales en un espacio bidimensional.

def f(x, y):
    return np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)

x = np.linspace(0, 5, 50)
y = np.linspace(0, 5, 40)

X, Y = np.meshgrid(x, y)
Z = f(X, Y)
plt.contourf(X, Y, Z, 20, cmap='RdGy')
plt.colorbar()

La imagen del dibujo es la siguiente:
los lugares negros son picos, los lugares rojos son valles.

imagen

Dibujar animación

La animación del dibujo debe importarse a la animationbiblioteca y la FuncAnimationanimación del dibujo se realiza llamando al método.

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation

fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)

# 初始化方法
def init():
    line.set_data([], [])
    return line,

# 数据更新方法,周期性调用
def animate(i):
    x = np.linspace(0, 2, 1000)
    y = np.sin(2 * np.pi * (x - 0.01 * i))
    line.set_data(x, y)
    return line,

#绘制动画,frames帧数,interval周期行调用animate方法
anim = animation.FuncAnimation(fig, animate, init_func=init,
                               frames=200, interval=20, blit=True)
anim.save('ccccc.gif', fps=30)

plt.show()

El anim.save()método del código anterior permite guardar archivos en formato mp4.
La imagen animada se dibuja de la siguiente manera:imagen

 

 

 

 
 

Supongo que te gusta

Origin blog.csdn.net/yezonghui/article/details/113922606
Recomendado
Clasificación