Python - matplotlib - trazado de pyplot

matplotlib

prefacio

Vue框架:Aprenda del proyecto Vue
OJ算法系列:máquina mágica cientos de refinación - algoritmo explicación detallada
Linux操作系统:de Fenghou Qimen - linux
C++11:Tongtianlu - C++11
Python常用模块:Tongtianlu - Python

Una línea para comprobar si Pandas se ha descargado:
pip list
Una línea para descargar:
pip install pandas

Uso básico:

  • Creador de personajes simbólicos:

    1. Marcador de puntos: .
    2. etiqueta de píxel: ,
    3. Marca circular: o
    4. Triangulo invertido marca :v
  • Estilo de estilo de línea de caracteres:

    1. línea sólida:-
    2. guiones: –
    3. Linea punteada: -.
    4. linea punteada::
  • colorcolor:

    1. azul: b
    2. rojo: r
    3. verde: gramo
    4. cian: c

Bibliotecas necesarias de gráficos

  • matplotlib

  • matplotlib.pyplot

  • nacido en el mar

  • pandas

  • entumecido

  • Observaciones: hay tres modos para usar el dibujo plt en el cuaderno

    • %matplotlib en línea: este es el modo predeterminado, genera imágenes estáticas directamente en Notebook
    • %matplotlib auto: abre una ventana de dibujo separada, igual que en pycharm
    • Cuaderno %matplotlib: genera una ventana de dibujo en el cuaderno, que puede acercar y alejar la imagen
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

conjunto de entrenamiento de lectura

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 y subtítulo:

  • xlabel: el texto debajo del eje x
  • ylabel: el texto debajo del eje y
  • título: título de la imagen
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 dibujo de gráficos de subárea:

  • subplot(): devuelve gráficos y cuadrantes
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 dibujar en cajas de gráficos
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

Dibuja cuatro tipos de diagramas.

histograma hist

  • Describa la cantidad de veces que aparecen los datos en cada valor, el eje horizontal es el valor y el eje vertical es la frecuencia
  • El parámetro de dibujo tiene solo una x
parámetro describir
X Parámetro requerido, matriz o secuencia de matriz.
contenedores Si es un número entero, es el número de divisiones. Si es una matriz, es la posición específica
rango Especifique el límite inferior y el límite superior del intervalo global (mín., máx.), tipo de tupla, el valor predeterminado es Ninguno.
densidad Si es Verdadero, devuelve un histograma de densidad de probabilidad; el valor predeterminado es Falso, devuelve un histograma del número de elementos en el intervalo correspondiente.
tipo de hist El tipo de histograma que se va a dibujar, el valor predeterminado es "barra", y los valores opcionales son barras apiladas (gráfico de barras apiladas), paso (gráfico de pasos sin llenar) y paso lleno (gráfico de pasos lleno).
plt.hist(x = train['SalePrice'], 
         bins=50,
         density=False,
         histtype='stepfilled')
plt.show()


13-0

Barra de histograma:

  • Hay dos parámetros de dibujo: x y altura.
parámetro describir
X Una secuencia escalar que representa las coordenadas X del histograma. El valor predeterminado de X es el punto medio de cada histograma, o puede ser el borde izquierdo del histograma.
altura Un escalar o secuencia de escalares que representan la altura del histograma.
ancho Parámetro opcional, escalar o similar a una matriz, el ancho predeterminado del histograma es 0,8.
abajo Parámetro opcional, escalar o similar a una matriz, la coordenada y del histograma tiene como valor predeterminado Ninguno.
algin Hay dos opciones {"centro", "borde"}, el valor predeterminado es 'centro', este parámetro determina la posición del valor x en el 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

Dispersión de diagrama de dispersión:

  • Dos parámetros de dibujo: x+y determina las coordenadas del punto
  • Trazar puntos de datos en ejes horizontal y vertical
parámetro describir
x, y Coordenadas de puntos dispersos
s área de puntos dispersos
C El color del punto de dispersión (el valor predeterminado es azul, 'b', los demás colores son los mismos que plt.plot())
marcador Estilo de dispersión (el valor predeterminado es un círculo sólido, 'o', otros estilos son los mismos que plt.plot())
alfa Transparencia dispersa (el número entre [0, 1], 0 significa completamente transparente, 1 significa completamente opaco)
anchos de línea ancho de línea de borde de punto
colores de borde El color del borde del punto de dispersión.
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 circular

  • Un parámetro de dibujo: x
parámetro describir
X Secuencia de matriz, los elementos de la matriz corresponden al número de áreas en forma de abanico.
explotar Resalte, establezca el tamaño del espacio de cada bloque
etiquetas Una secuencia de cadenas de lista, anotando un nombre de etiqueta para cada sector.
color Establezca el color para cada área en forma de abanico y el valor predeterminado se establece automáticamente de acuerdo con el ciclo de color.
autoparte La cadena de formato "fmt%pct" formatea la etiqueta de cada segmento usando un porcentaje y lo coloca dentro del segmento.
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 especiales:

  • Logarítmico:

    1. Uso: la distribución x es muy amplia, parte de y es alta
    2. Propósito de uso: la distribución tiende a la distribución normal

pandas conspirando

  • Pandas encapsula una función de dibujo simple basada en matplotlib,
    que puede agregar directamente .plot() a DataFrame y Series para dibujar

  • Parámetros de .plot():

    1. tipo: el anterior hist, scatter, pie, bar

Dibujo en serie

#直接绘图
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

Trazado de tramas de datos

# 部分数据直接绘图
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

nacido en el mar

  • Introducción: empaquetado simplificado de matplotlib, pero no completamente funcional

  • Cinco estilos de tema:

    1. cuadrícula oscura (cuadrícula gris)
    2. rejilla blanca (cuadrícula blanca)
    3. negro oscuro)
    4. blanco Blanco)
    5. garrapatas (cruz)

Distribución del histograma:

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


33-1

Mapa de densidad del kernel kdeplot:

  • gráfico de densidad del kernel:
  1. Propósito: Mostrar la distribución de datos en el segmento de datos continuos del eje X.
  2. Características: este gráfico es una variante del histograma que utiliza curvas suaves para trazar valores horizontales, lo que da como resultado una distribución más suave.
sns.kdeplot(x = train['SalePrice'])
<AxesSubplot:xlabel='SalePrice', ylabel='Density'>

35-1

Diagrama de distribución del mapa de densidad del histograma:

  • Trazar el histograma y el gráfico de densidad al mismo tiempo
sns.distplot(x = train["SalePrice"],bins=20, kde=True)
<AxesSubplot:ylabel='Density'>

37-2

Diagrama de conteo de gráfico de barras y gráfico de barras:

  • countplot: datos de un parámetro de dibujo

  • gráfico de barras: dos parámetros de dibujo x&y

  • conteo

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

40-0

  • gráfico de barras:
  1. Al visualizar un atributo mediante un gráfico de barras, las estimaciones puntuales y los intervalos de confianza de los datos se muestran como barras rectangulares.
  2. La línea negra de cada barra es la barra de error, que indica el rango de error de datos. Cuando las barras de error son relativamente "largas", generalmente la dispersión de datos es grande o las muestras de datos son pequeñas.
plt.figure(figsize=(10,6))
sns.barplot(x='GarageCars',y = 'SalePrice',data=train)
plt.show()

42-0

  • Usa el histograma para contar la proporción de NaN en la columna correspondiente
# 使用矩形图统计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

Diagrama de caja:

  • Ventajas: Mostrar la distribución de datos relacionados con la categoría
    Mostrar los cuartiles máximo, mínimo, mediano y superior e inferior de un conjunto de datos
  • Dos parámetros de trazado: x & y
plt.figure(figsize=(10,5))
sns.boxplot(
    x = 'GarageCars',
    y = 'SalePrice',
    data = train
    )
plt.show()

46-0

Gráfica conjunta de relaciones bivariadas:

  • Trazar un gráfico de dos variables utilizando gráficos bivariados y 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>

[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leeching, se recomienda guardar la imagen y cargarla directamente (img-OxLMyIqv-1680433039890)(output_48_2.png)]

Diagrama de pares de gráficos de relaciones por pares:

  • Función: concéntrese en dibujar relaciones por pares, mostrando la relación entre dos características
  • Método: cree una red de ejes, de modo que cada variable en el tipo de datos pueda compartir 1 fila en el eje y y 1 columna en el eje x
  • Características: la línea diagonal es el histograma de cada atributo, y la línea fuera de la diagonal es el gráfico de correlación 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:

  • Función: identificar variables predictoras y métodos de correlación de variables 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 regresión implot®plot:

  • Al dibujar un gráfico de dispersión, generar una relación lineal entre dos variables

  • diagrama de registro ():

    1. los datos pueden ser un DataFrame
    2. Los parámetros x, y aceptan una variedad de tipos de datos, incluidas matrices numpy, Series
  • implot():

    1. El parámetro de datos no puede estar vacío.
    2. Los parámetros x e y deben especificarse como cadenas.
  • El formato de datos similar a una matriz unidimensional admitido por reregplot() pero no admitido por lmplot() se denomina "datos de formato largo" o "datos ordenados"

lmplot

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

diagrama de registro ()

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

for bucle dibujar subgrafo

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

Supongo que te gusta

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