Python - matplotlib - plotagem de pyplot

matplotlib

prefácio

Vue框架:Aprenda com o projeto Vue
OJ算法系列:máquina mágica centenas de refino - explicação detalhada
Linux操作系统:do algoritmo de Fenghou Qimen - linux
C++11:Tongtianlu - C++ 11
Python常用模块:Tongtianlu - Python

Uma linha para verificar se o Pandas foi baixado:
pip list
Uma linha para baixar:
pip install pandas

Uso básico:

  • Criador de personagem token:

    1. Marcador de pontos: .
    2. marca de pixel: ,
    3. Marca do círculo: o
    4. Marca do triângulo invertido: v
  • Estilo de linha de caracteres de estilo:

    1. linha sólida:-
    2. Traços: –
    3. Linha pontilhada: -.
    4. linha pontilhada::
  • corcor:

    1. azul: b
    2. vermelho: r
    3. Verde: g
    4. Ciano: c

Bibliotecas Gráficas Necessárias

  • matplotlib

  • matplotlib.pyplot

  • nascido no mar

  • pandas

  • entorpecido

  • Observações: Existem três modos para usar o desenho plt no notebook

    • %matplotlib inline: Este é o modo padrão, gera imagens estáticas diretamente no Notebook
    • %matplotlib auto: Abre uma janela de desenho separada, igual ao pycharm
    • %matplotlib notebook: Gera uma janela de desenho no notebook, que pode ampliar e reduzir a imagem
import matplotlib.pyplot as plt
import matplotlib
import seaborn as sns
import numpy as np 
import warnings

warnings.filterwarnings("ignore")
# %matplotlib inline的用途:直接在Notebook中渲染图形
%matplotlib inline

ler conjunto de treinamento

import pandas as pd

train = pd.read_csv('./data_set/house_price_train.csv')
print(train.shape)
print(train.dtypes)
#train.head()
#train.tail()

#查看非数值型特征值:
categorical_feats = train.dtypes[train.dtypes == 'object'].index
print(type(categorical_feats))
print('*'*100)
print(categorical_feats)

#查看数值型特征值:
value_feats = train.dtypes[train.dtypes != 'object'].index
print(type(value_feats))
print('*'*100)

#特征值数组还可以回用:
print(train[value_feats].values)
(1460, 81)
Id                 int64
MSSubClass         int64
MSZoning          object
LotFrontage      float64
LotArea            int64
                  ...   
MoSold             int64
YrSold             int64
SaleType          object
SaleCondition     object
SalePrice          int64
Length: 81, dtype: object
<class 'pandas.core.indexes.base.Index'>
****************************************************************************************************
Index(['MSZoning', 'Street', 'Alley', 'LotShape', 'LandContour', 'Utilities',
       'LotConfig', 'LandSlope', 'Neighborhood', 'Condition1', 'Condition2',
       'BldgType', 'HouseStyle', 'RoofStyle', 'RoofMatl', 'Exterior1st',
       'Exterior2nd', 'MasVnrType', 'ExterQual', 'ExterCond', 'Foundation',
       'BsmtQual', 'BsmtCond', 'BsmtExposure', 'BsmtFinType1', 'BsmtFinType2',
       'Heating', 'HeatingQC', 'CentralAir', 'Electrical', 'KitchenQual',
       'Functional', 'FireplaceQu', 'GarageType', 'GarageFinish', 'GarageQual',
       'GarageCond', 'PavedDrive', 'PoolQC', 'Fence', 'MiscFeature',
       'SaleType', 'SaleCondition'],
      dtype='object')
<class 'pandas.core.indexes.base.Index'>
****************************************************************************************************
[[1.00000e+00 6.00000e+01 6.50000e+01 ... 2.00000e+00 2.00800e+03
  2.08500e+05]
 [2.00000e+00 2.00000e+01 8.00000e+01 ... 5.00000e+00 2.00700e+03
  1.81500e+05]
 [3.00000e+00 6.00000e+01 6.80000e+01 ... 9.00000e+00 2.00800e+03
  2.23500e+05]
 ...
 [1.45800e+03 7.00000e+01 6.60000e+01 ... 5.00000e+00 2.01000e+03
  2.66500e+05]
 [1.45900e+03 2.00000e+01 6.80000e+01 ... 4.00000e+00 2.01000e+03
  1.42125e+05]
 [1.46000e+03 2.00000e+01 7.50000e+01 ... 6.00000e+00 2.00800e+03
  1.47500e+05]]

Título e legenda:

  • xlabel: o texto sob o eixo x
  • ylabel: o texto sob o eixo y
  • titulo: titulo da imagem
plt.title("House-SalePrice", fontsize=16) # 设置标题
plt.xlabel("SalePrice_Log", fontsize=15) # 横坐标
plt.ylabel("count", fontsize=15) # 纵坐标
print(train['LotArea'].values)
plt.plot(train['LotArea'].index, train['LotArea'].values, 
         linestyle=':',marker=".",color='r')
 #":"表示虚线样式,"."表示点标记,"r"表示线为红色
plt.show()
[ 8450  9600 11250 ...  9042  9717  9937]

6_1

Método de desenho de gráficos de subárea:

  • subplot(): retorna gráficos e quadrantes
import matplotlib.pyplot as plt
plt.figure(figsize = (8, 8)) # 指定整体图片大小

fig, ax = plt.subplots(2, 2) # fig是图形对象,ax表示子图轴数组, 继续传参则为第几个子图
print(type(ax))
#ax用于区分象限区域内图形:
ax[0][0].set_title(1)
ax[0][1].set_title(2)
ax[1][0].set_title(3)
ax[1][1].set_title(4)

print(ax)
<class 'numpy.ndarray'>
[[<AxesSubplot:title={'center':'1'}> <AxesSubplot:title={'center':'2'}>]
 [<AxesSubplot:title={'center':'3'}> <AxesSubplot:title={'center':'4'}>]]



<Figure size 800x800 with 0 Axes>

8-2

  • para desenhar em caixas gráficas
plt.figure(figsize = (8, 8))
fig, ax = plt.subplots(2, 2) 
'''
???
'''
print(categorical_feats[:4]) # 输出对应属性值列名

for row in range(2):
    for col in range(2):
        data = train[categorical_feats[row*2+col]].value_counts()
        '''
        ???
        '''F
        ax[row][col].plot(data.index, data.values)
        ax[row][col].set_title(f'{
      
      categorical_feats[row*2+col]}')
fig.tight_layout() # 自动保持子图之间的正确间距。
plt.show()
Index(['MSZoning', 'Street', 'Alley', 'LotShape'], dtype='object')



<Figure size 800x800 with 0 Axes>

10-2

Desenhe quatro tipos de diagramas

histograma hist

  • Descreva o número de vezes que os dados aparecem em cada valor, o eixo horizontal é o valor e o eixo vertical é a frequência
  • O parâmetro de desenho tem apenas um x
parâmetro descrever
x Parâmetro obrigatório, array ou sequência de array.
caixas Se for um número inteiro, é o número de divisões. Se for uma matriz, é a posição específica
faixa Especifique o limite inferior e o limite superior do intervalo global (min, max), tipo de tupla, o valor padrão é Nenhum.
densidade Se True, retorna um histograma de densidade de probabilidade; o padrão é False, retorna um histograma do número de elementos no intervalo correspondente.
tipo hist O tipo de histograma a ser desenhado, o valor padrão é "barra", e os valores opcionais são barstacked (gráfico de barras empilhadas), step (gráfico de etapas não preenchidas) e stepfilled (gráfico de etapas preenchidas).
plt.hist(x = train['SalePrice'], 
         bins=50,
         density=False,
         histtype='stepfilled')
plt.show()


13-0

Barra do histograma:

  • Existem dois parâmetros de desenho: x e altura
parâmetro descrever
x Uma sequência escalar que representa as coordenadas x do histograma. O valor x padrão é o ponto médio de cada histograma ou pode ser a borda esquerda do histograma.
altura Um escalar ou sequência de escalares representando a altura do histograma.
largura Parâmetro opcional, escalar ou semelhante a uma matriz, a largura padrão do histograma é 0,8.
fundo Parâmetro opcional, escalar ou semelhante a uma matriz, a coordenada y do histograma é padronizada como Nenhum.
algin Existem duas opções {"center", "edge"}, o padrão é 'center', este parâmetro determina a posição do valor x no histograma.
data = train['MSZoning'].value_counts() 
print(data)
print(type(data))
plt.bar(x = data.index, 
        height = data.values,
        width=0.5,
        align='center') 
RL         1151
RM          218
FV           65
RH           16
C (all)      10
Name: MSZoning, dtype: int64
<class 'pandas.core.series.Series'>





<BarContainer object of 5 artists>

15-2

Dispersão do gráfico de dispersão:

  • Dois parâmetros de desenho: x+y determina as coordenadas do ponto
  • Plotar pontos de dados nos eixos horizontal e vertical
parâmetro descrever
x, y Coordenadas de pontos dispersos
s área de pontos dispersos
c A cor do ponto de dispersão (o padrão é azul, 'b', as outras cores são iguais a plt.plot())
marcador Estilo Scatter (o valor padrão é círculo sólido, 'o', outros estilos são iguais a plt.plot())
alfa Transparência de dispersão (o número entre [0, 1], 0 significa completamente transparente, 1 significa completamente opaco)
larguras de linha largura da linha da borda do ponto
cores de borda A cor da borda do ponto de dispersão
plt.scatter(x = train.TotalBsmtSF, 
            y = train.SalePrice, 
            c='b',
            marker=',',
            alpha=0.5
            )
plt.scatter(x = train.BsmtUnfSF, 
            y = train.SalePrice, 
            c='r',
            marker='.',
            alpha=0.8
            ) 
# 绘制多个属性到一个散点图
<matplotlib.collections.PathCollection at 0x216c67c0130>

17-1

gráfico de pizza

  • Um parâmetro de desenho: x
parâmetro descrever
x Sequência da matriz, os elementos da matriz correspondem ao número de áreas em forma de leque.
explodir Destaque, defina o tamanho da lacuna de cada bloco
rótulos Uma sequência de strings de lista, anotando um nome de rótulo para cada setor.
cor Defina a cor para cada área em forma de leque e o padrão será definido automaticamente de acordo com o ciclo de cores.
autopct A string de formato "fmt%pct" formata o rótulo de cada fatia usando uma porcentagem e a coloca dentro da fatia.
plt.figure(figsize=(8,8))
plt.pie(
    x = train['MSZoning'].value_counts(),
    explode = (0, 0.1, 0.2, 0, 0), 
    autopct = '%1.2f%%'
    )
plt.show()

19-0

Habilidades especiais:

  • Logarítmico:

    1. Uso: a distribuição x é muito ampla, parte de y é alta
    2. Finalidade de uso: distribuição tende a distribuição normal

Pandas tramando

  • Pandas encapsula uma função de desenho simples baseada em matplotlib,
    que pode adicionar diretamente .plot() a DataFrame e Series para desenhar

  • Parâmetros .plot():

    1. kind: hist, scatter, pie, bar acima

desenho de série

#直接绘图
train['SalePrice'].plot()
<AxesSubplot:>

23_1

#统计某值后绘图
train['MSZoning'].value_counts().plot()
<AxesSubplot:>

24-1

#指定kind
train['MSZoning'].value_counts().plot(kind="bar") # 柱状图
<AxesSubplot:>

25-1

train['SalePrice'].plot.hist() 
# 直方图,.hist()相当于kind='hist'
# train['SalePrice'].plot(kind='hist')
<AxesSubplot:ylabel='Frequency'>

26-1

Plotagem de DataFrame

# 部分数据直接绘图
train_d = train.loc[:,value_feats[1:5]]
print(train_d)

#不使用plot则多种数据分开绘图
train_d.hist(
    figsize=(8, 10), 
    bins=50, 
    xlabelsize=8,   #x轴说明字体大小
    ylabelsize=8
             )

plt.show()
      MSSubClass  LotFrontage  LotArea  OverallQual
0             60         65.0     8450            7
1             20         80.0     9600            6
2             60         68.0    11250            7
3             70         60.0     9550            7
4             60         84.0    14260            8
...          ...          ...      ...          ...
1455          60         62.0     7917            6
1456          20         85.0    13175            6
1457          70         66.0     9042            7
1458          20         68.0     9717            5
1459          20         75.0     9937            5

[1460 rows x 4 columns]

28-1

#使用plot则多种数据合并绘图
train.loc[:,['MSSubClass','LotFrontage','OpenPorchSF']].plot.hist()
<AxesSubplot:ylabel='Frequency'>

29-1

# 对属性值含有NaN的列进行统计使用柱状图显示
missing = train.isnull().sum()
print(missing)
''' 
此处的missing > 0指的是?
'''
missing = missing[missing > 0]
#print(missing)
missing = missing.sort_values(ascending=False)
# ascending=False 为升序
# inplace=True 为不原地修改
missing.plot.bar()
Id                 0
MSSubClass         0
MSZoning           0
LotFrontage      259
LotArea            0
                ... 
MoSold             0
YrSold             0
SaleType           0
SaleCondition      0
SalePrice          0
Length: 81, dtype: int64





<AxesSubplot:>

30-2

nascido no mar

  • Introdução: Empacotamento simplificado de matplotlib, mas não totalmente funcional

  • Cinco estilos de tema:

    1. darkgrid (grade cinza)
    2. grade branca (grade branca)
    3. Preto Escuro)
    4. Branco Branco)
    5. carrapatos (cruz)

Gráfico de histograma:

import seaborn as sns
sns.set(style = "darkgrid")
sns.displot(x = train['SalePrice'])
''' 
???
'''
<seaborn.axisgrid.FacetGrid at 0x216ce4078b0>


33-1

Mapa de densidade do kernel kdeplot:

  • gráfico de densidade do kernel:
  1. Finalidade: Exibir a distribuição de dados no segmento de dados contínuo do eixo X.
  2. Características: Este gráfico é uma variante do histograma que usa curvas suaves para traçar valores horizontais, resultando em uma distribuição mais suave.
sns.kdeplot(x = train['SalePrice'])
<AxesSubplot:xlabel='SalePrice', ylabel='Density'>

35-1

Distplot do mapa de densidade do histograma:

  • Plote o histograma e o gráfico de densidade ao mesmo tempo
sns.distplot(x = train["SalePrice"],bins=20, kde=True)
<AxesSubplot:ylabel='Density'>

37-2

Countplot e barplot do gráfico de barras:

  • countplot: um dado de parâmetro de desenho

  • barplot: dois parâmetros de desenho x&y

  • gráfico de contagem

ax = sns.countplot(
    x="MSSubClass", #x轴坐标文字说明
    data = train
    )

40-0

  • gráfico de barras:
  1. Ao visualizar um atributo usando um gráfico de barras, as estimativas pontuais e os intervalos de confiança dos dados são exibidos como barras retangulares.
  2. A linha preta de cada barra é a barra de erro, indicando o intervalo de erro de dados. Quando as barras de erro são relativamente "longas", geralmente a dispersão de dados é grande ou as amostras de dados são pequenas.
plt.figure(figsize=(10,6))
sns.barplot(x='GarageCars',y = 'SalePrice',data=train)
plt.show()

42-0

  • Use o histograma para contar a proporção de NaN na coluna correspondente
# 使用矩形图统计NaN在对应列所占比例
missing = train.isnull().mean()
missing = missing.sort_values(ascending=False)[:20]

# 以条形图显示NaN值在每个属性值所占比例
sns.barplot(x=missing.index,y=missing.values)
# 将x坐标表示旋转90度
plt.xticks(rotation=90)
plt.show()


44-0

Boxplot:

  • Vantagens: Mostrar a distribuição dos dados relacionados à categoria
    Mostrar o máximo, mínimo, mediano e quartis superior e inferior de um conjunto de dados
  • Dois parâmetros de plotagem: x & y
plt.figure(figsize=(10,5))
sns.boxplot(
    x = 'GarageCars',
    y = 'SalePrice',
    data = train
    )
plt.show()

46-0

Plotagem conjunta do gráfico de relacionamento bivariado:

  • Plotar um gráfico de duas variáveis ​​usando gráficos bivariados e univariados
# 使用sns散点图,描述变量和房价之间的关系
sns.scatterplot(
    x = train['TotalBsmtSF'],
    y = train['SalePrice']
    )

# 使用双变量图,描述变量的分布图和变量相关的散点图组合在一起
plt.figure(figsize = (4, 3))
sns.jointplot(
    x = train.TotalBsmtSF, 
    y = train.SalePrice
    )
plt.xlabel('GrLvArea')
plt.ylabel('SalePrice')
plt.title('Basis')
plt.show()


48-0

<Figure size 400x300 with 0 Axes>

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-OxLMyIqv-1680433039890)(output_48_2.png)]

Gráfico de relacionamento pairwise pairplot:

  • Função: Concentre-se em desenhar relações de pares, mostrando a relação entre dois recursos
  • Método: Crie uma rede Axes, para que cada variável no tipo de dados possa compartilhar 1 linha no eixo y e 1 coluna no eixo x
  • Características: A linha diagonal é o histograma de cada atributo e a linha fora da diagonal é o gráfico de correlação entre diferentes atributos
train_pair = train.loc[:,["LotArea", "GarageArea", "SalePrice"]]
tmp = sns.pairplot(data = train_pair)
print(type(tmp))
<class 'seaborn.axisgrid.PairGrid'>

50-1

mapa de calor mapa de calor:

  • Função: identificar variáveis ​​preditoras e métodos de correlação de variáveis ​​de destino
import numpy as np
sns.set(font_scale=1.1)
correlation_train = train.corr()
# 返回协方差的上三角矩阵
mask = np.triu(correlation_train.corr())
''' 
???mask???
'''
plt.figure(figsize=(20, 20))
sns.heatmap(data = correlation_train,
            annot = True,#是否对heatmap中每个方格写入数据。
            fmt='.1f',# 注释格式
            cmap='coolwarm',# 颜色列表
            square=True,# 将每个单元格为方形
            mask=mask,
#vmax,vmin, 图例中最大值和最小值的显示值,没有该参数时默认不显示
           )
plt.show()

52-1

# 对数据的部分列进行热力图显示
plt.figure(figsize=(10, 10))
# corr_abs = train.corr().abs() 
# ser_corr = corr_abs.nlargest(len(numerical_feats), "SalePrice_Log")["SalePrice_Log"]
# cols = ser_corr[ser_corr.values > 0.43].index
cols = ['SalePrice', 'OverallQual', 'GrLivArea', 'GarageCars',
       'GarageArea', 'TotalBsmtSF', '1stFlrSF', 'FullBath', 'YearBuilt',
       'YearRemodAdd', 'TotRmsAbvGrd', 'Fireplaces']
cm = train[cols].corr()
sns.heatmap(
    data = cm, 
    annot=True, 
    square=True, 
    fmt='.1f'
    )
plt.show()

53-0

Gráfico de regressão implot®plot:

  • Ao desenhar um gráfico de dispersão, imprima uma relação linear entre duas variáveis

  • regplot():

    1. os dados podem ser um DataFrame
    2. Os parâmetros x, y aceitam uma variedade de tipos de dados, incluindo arrays numpy, Series
  • lplot():

    1. O parâmetro de dados não pode estar vazio
    2. Os parâmetros x e y devem ser especificados como strings.
  • O formato de dados tipo array unidimensional suportado por regplot() mas não suportado por lmplot() é chamado de "dados de formato longo" ou "dados organizados"

lplot

import seaborn as sns
import pandas 
train = pandas.read_csv('./data_set/house_price_train.csv')

sns.lmplot(
    x = 'OverallQual',
    y = 'SalePrice',
    data = train
)
<seaborn.axisgrid.FacetGrid at 0x296ec3fb310>

56-1

sns.lmplot(
    x = '1stFlrSF',
    y = 'SalePrice',
    data = train
)
<seaborn.axisgrid.FacetGrid at 0x296ec3fa680>

57-1

regplot()

sns.regplot(
    x = 'YearBuilt', 
    y = 'SalePrice', 
    data = train
    )
<AxesSubplot:xlabel='YearBuilt', ylabel='SalePrice'>


59-1

# order大于 1,使用numpy.polyfit来估计多项式回归,常用于进行曲线拟合的函数
sns.regplot(
    x = train['YearBuilt'], 
    y = train['SalePrice'], 
    order = 3
    )
<AxesSubplot:xlabel='YearBuilt', ylabel='SalePrice'>

60-1

subgrafo for loop draw

import matplotlib.pyplot as plt
# 使用for循环对属性遍历
fig, axes = plt.subplots(4, 3, figsize=(25, 30))
# flatten用于降维,将几个多维数组变成几个一维数组
axes = axes.flatten()
for columns, j in zip(train.select_dtypes(include=['number']).columns[:13], axes):
    print(columns,' : ', j)
    sns.regplot(
        x=columns, 
        y="SalePrice", 
        data=train,
        ax=j, 
        order=3
        )
Id  :  AxesSubplot(0.125,0.712609;0.227941x0.167391)
MSSubClass  :  AxesSubplot(0.398529,0.712609;0.227941x0.167391)
LotFrontage  :  AxesSubplot(0.672059,0.712609;0.227941x0.167391)
LotArea  :  AxesSubplot(0.125,0.511739;0.227941x0.167391)
OverallQual  :  AxesSubplot(0.398529,0.511739;0.227941x0.167391)
OverallCond  :  AxesSubplot(0.672059,0.511739;0.227941x0.167391)
YearBuilt  :  AxesSubplot(0.125,0.31087;0.227941x0.167391)
YearRemodAdd  :  AxesSubplot(0.398529,0.31087;0.227941x0.167391)
MasVnrArea  :  AxesSubplot(0.672059,0.31087;0.227941x0.167391)
BsmtFinSF1  :  AxesSubplot(0.125,0.11;0.227941x0.167391)
BsmtFinSF2  :  AxesSubplot(0.398529,0.11;0.227941x0.167391)
BsmtUnfSF  :  AxesSubplot(0.672059,0.11;0.227941x0.167391)

62-1

Acho que você gosta

Origin blog.csdn.net/buptsd/article/details/129915089
Recomendado
Clasificación