python - resumo de aprendizagem Matplotlib

índice

Um, o uso comum de Matplotlib

1. Desenhe uma imagem simples

2. Adicione elementos comuns

3. Desenhe curvas múltiplas

4. Conheça a figura (tela)

5. Desenhe várias imagens

6. Desenhe diagramas comuns

7. Abreviação de parâmetro

7.1 c significa cor

7,2 ls significa estilo de linha (estilo de linha)

7.3 marcador (estilo de marca)

7.4 Outras abreviações

2. Uso avançado de Matplotlib

1. Adicionar notas de texto

2. Desenho de imagens 3D

3. Importar imagens (preços de habitação na Califórnia)

4. Desenhe linhas de contorno

Desenhe animação

 


Matplotlib é uma biblioteca de plotagem Python baseada em NumPy. É uma ferramenta para visualização de dados em aprendizado de máquina.

Matplotlib tem propriedades de ferramenta fortes, o que significa que é apenas para meu uso, não precisamos gastar muita energia para refiná-lo.

Precisamos apenas saber o que ele pode fazer, quais gráficos podem ser desenhados e uma impressão é o suficiente.

Seja o que for que usarmos no uso real, seremos proficientes quando o usarmos.

Um, o uso comum de Matplotlib

1. Desenhe uma imagem simples

Vamos pegar a função de ativação mais comum no aprendizado de máquina como sigmoidexemplo, vamos desenhá-la.

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

A fórmula de sigmóide é: O 
 método plot () exibe a tendência entre as variáveis ​​e o método show () exibe a imagem.
Pegamos a imagem conforme mostrado:

2. Adicione elementos comuns

Adicionamos alguns elementos de referência e a explicação de cada função é detalhada no 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)

O código acima inclui conteúdo como limitar o intervalo dos eixos X e Y, adicionar títulos e rótulos, definir a grade, adicionar linhas de referência, salvar imagens e assim por diante.
A imagem do desenho é a seguinte:

3. Desenhe curvas múltiplas

#生成均匀分布的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 desenhar várias imagens, chame vários plot () diretamente.

Nota: Se o método legend () não for chamado, a legenda (legenda ) no canto superior esquerdo não será desenhada . O colorparâmetro suporta representação hexadecimal.

4. Conheça a figura (tela)

Em primeiro lugar, sabemos que figura (tela), como legenda, que mencionamos acima, é a exibição de rótulos de linha.

A linha pontilhada delimitada pela grade é a linha de referência da grade. Rótulos de texto, como Title / x axislabel. Esta imagem nos ajuda a ter uma compreensão intuitiva da figura.

imagem

5. Desenhe várias imagens

Uma figura pode corresponder a vários gráficos . Agora, tentamos desenhar várias imagens em uma 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()

Dentre eles, o mais crítico é o subplotsmétodo, que gera subimagens com 2 linhas e 2 colunas, e então chamamos cada método de desenho em ax_list.

Dentre eles 'r-', o 'b-.'parâmetro é a abreviatura de desenho, e os parágrafos seguintes de abreviatura de parâmetro serão explicados separadamente.

6. Desenhe diagramas comuns

Freqüentemente, usamos gráficos para representar a relação entre os dados. Os gráficos comuns incluem histogramas, histogramas, gráficos de pizza, gráficos de dispersão e assim por diante.

# 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()















A imagem do desenho é a seguinte:

7. Abreviação de parâmetro

Como matplotlib suporta abreviações para parâmetros, acho que é necessário falar sobre as abreviações de cada parâmetro separadamente.

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

A imagem do desenho é a seguinte:

7.1  c significa cor

personagem cor
'b' azul
'g' verde
'r' vermelho
'c' ciano
'm' magenta
'Y' amarelo
'k' Preto
'C' Branco

7,2 ls significa estilo de linha (estilo de linha)

personagem Descrição
'-' estilo de linha sólida
'-' estilo de linha tracejada
'-.' estilo de linha traço-ponto
':' estilo de linha pontilhada
'.' marcador de ponto
',' marcador de pixel
'o' marcador de círculo
'v' marcador de triângulo_ para baixo
'^' marcador triângulo_up
'<' triângulo_esquerdo marcador
'>' marcador triângulo_direito
'1' marcador tri_down
'2' marcador tri_up
'3' marcador tri_left
'4' marcador tri_right
's' marcador quadrado
'p' marcador de pentágono
'*' marcador de estrela
'h' marcador hexagon1
'H' marcador hexágono2
'+' marcador positivo
'x' marcador x
'D' marcador de diamante
'd' marcador de diamante fino
'|' marcador vline
'_' marcador hline

7.3 marcador (estilo de marca)

O estilo da marca é mostrado da seguinte forma:imagem

7.4 Outras abreviações

  1. lwRepresenta a largura da linha (largura da linha) , como: lw = 2,5

  2. msRepresenta o tamanho do marcador (tamanho da marca), como: ms = 5

  3. mfcRepresenta markerfacecolor (cor do marcador), como: mfc = 'red'

2. Uso avançado de Matplotlib

1. Adicionar notas de texto

Podemos adicionar texto, setas e outras anotações na tela (figura) para tornar a apresentação da imagem mais clara e precisa.
Nós desenhamos anotações chamando annotatemé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))

A imagem do desenho é a seguinte:

imagem

2. Desenho de imagens 3D

Para desenhar uma imagem 3D, você precisa importar a 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)

O que cmapsignifica mapa de cores, usado para desenhar a distribuição de cores, gradiente de cor, etc. cmapNormalmente colorbarusado em conjunto para desenhar a barra de cores da imagem.

imagem

3. Importar imagens (preços de habitação na Califórnia)

Apresentando mpimga biblioteca, para importar imagens.
Vamos tomar os dados de preços de imóveis da Califórnia como exemplo, importar dados de preços de imóveis da Califórnia para desenhar um gráfico de dispersão e importar fotos de mapas da Califórnia para visualizar os dados de preços de imóveis correspondentes à latitude e longitude do mapa. Ao mesmo tempo, use a barra de cores para desenhar a imagem térmica.
código mostrado como abaixo:

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)

A imagem do desenho é a seguinte:
vermelho é caro, azul é barato, o tamanho do círculo indica a populaçãoimagem

4. Desenhe linhas de contorno

As linhas de contorno são úteis para desenhar imagens tridimensionais no espaço 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()

A imagem do desenho é a seguinte:
lugares pretos são picos, lugares vermelhos são vales.

imagem

Desenhe animação

A animação do desenho precisa ser importada para a animationbiblioteca e a FuncAnimationanimação do desenho é realizada chamando o 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()

O anim.save()método no código acima oferece suporte ao salvamento de arquivos no formato mp4.
A imagem animada é desenhada da seguinte forma:imagem

 

 

 

 
 

Acho que você gosta

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