(Tres) visualización de datos Matplotlib

Datos del caso: https://cloud.189.cn/t/aYbUv2JbEzUn

1. Área de dibujo de Matplotlib

Al dibujar, generalmente incluye tres niveles, de grande a pequeño: tablero de dibujo, lienzo y área de dibujo. La ventana es el tablero de dibujo, la figura es el objeto de dibujo y los ejes es el área de dibujo. Un objeto de dibujo puede contener varios subgrafos de ejes, y cada eje tiene su propia área de dibujo del sistema de coordenadas.

Puede usar plt.gcf (obtener la figura actual) para obtener el objeto de dibujo actual, plt.gca (obtener los ejes actuales) para obtener el área de dibujo actual y plt.sca (establecer la figura actual) para establecer el área de dibujo de la operación actual.

1.1 Crear objetos de dibujo

  • fugure (num = None, figsize = None, dip = None, facecolor = None, ...) 
  • num: número o nombre de la imagen
  • figsize: el ancho y alto de la imagen, en pulgadas (1 pulgada = 2,54 cm)
  • dip: especifique la resolución del objeto de dibujo, es decir, cuántos píxeles por pulgada

1.2 Crear un solo subgrafo

  • subtrama (nrows, ncols, index, ** kwargs)
  • nrows: número total de filas
  • ncols: número total de columnas
  • índice: especifique el número de izquierda a derecha y de arriba a abajo. Si los tres parámetros nrows, ncols e index son todos menores que 10, puede eliminarlos todos, como 222 

1.3 Ejemplo

fig = plt.figure(figsize=(10,8))
fig.suptitle("test1")
ax1 = plt.subplot(221)
ax1.set_title("test221")
ax1.plot([1,2,3,4,5],[4,8,12,16,20])

ax2 = plt.subplot(222)
ax2.plot([5,4,3,2,1])

ax3 = plt.subplot(223)
ax3.plot([1,2,3,3,3])

ax4 = plt.subplot(224)
ax4.plot([5,4,3,3,3])

2. El problema de visualización de los caracteres chinos y los signos negativos. 

plt.figure(figsize=(6,4))
# 中文显示问题
plt.rcParams['font.sans-serif']=['SimHei']
plt.text(0,0,u'这是一个测试')

# 负号显示问题
plt.rcParams['axes.unicode_minus']=False

Tres gráficos comunes

3.1 Diagrama de dispersión

# 设置图片大小
plt.rcParams['figure.figsize']=8,6
# 设置画板颜色
sns.set_palette(sns.color_palette("muted"))

# 随机生成50个点,x轴取值范围0-20
x = np.random.rand(50)*20

# 随机生成50个点,y轴取值范围0-10
y = np.random.rand(50)*10

plt.plot(x,y,'o')

3.2 Gráfico de burbujas

# 生成50个点
N = 50
x = np.random.rand(N)
y = np.random.rand(N)

# 点的颜色
colors = np.random.rand(N)
# 点的半径
area = (30*np.random.rand(N))**2
# alpha:透明度0.5
plt.scatter(x,y,s=area,c=colors,alpha=0.5)
plt.show()

3.3 Gráfico de líneas

t = np.arange(0.0, 2.0, 0.1)
s = np.sin(t*np.pi)

plt.plot(t,s,'r--',label='aaaa')
plt.plot(t*2, s, 'b--', label='bbbb')
plt.xlabel('x')
plt.ylabel('y')
plt.title('test')
# legend  图例  说明
plt.legend()

3.4 Diagrama de violín

Similar a un diagrama de caja, además del máximo, mínimo y mediano, las curvas en ambos lados también describen la densidad de probabilidad

data = np.random.rand(20,5)
plt.violinplot(data,showmedians=True,showmeans=False)

3.5 Histograma

# 导入包
import  pandas as pd
import seaborn as  sns
import numpy as np
import matplotlib.pyplot as plt
# 读取数据
df=pd.read_csv("./data/HR.csv")
s = df["salary"]
df.head(4)
# 柱状图
plt.title("SALARY")
plt.xlabel("salary")
plt.ylabel("count")

# 添加横轴的标注
plt.xticks(np.arange(len(s.value_counts()))+0.5,s.value_counts().index)

# 设置x轴和y轴最小值、最大值
plt.axis([0,4,0,10000])

# bar(x坐标int或者float,条形的高度int或者float,线条的宽度0-1)
plt.bar(np.arange(len(s.value_counts()))+0.5,s.value_counts(),width=0.5)

for x,y in zip(np.arange(len(s.value_counts()))+0.5,s.value_counts()):
        plt.text(x,y,y,ha="center",va="bottom")
    
plt.show()

 

# seaborn绘柱状图
# 设置背景颜色
sns.set_style(style="darkgrid")
plt.rcParams['figure.figsize']=6,6
# 设置字体、字体大小等
sns.set_context(context="poster",font_scale=0.8)
# 设置调色板
# sns.set_palette("spring")
sns.set_palette(sns.color_palette("RdBu",n_colors=7))
sns.countplot(x="salary",data=df)

'''
plt.rcParams['font.sans-serif']=['SimHei'] # 用来显示中文标签
plt.rcParams['axes.unicode_minus']=False # 用来显示负号
plt.rcParams['figure.figsize'] = (16.0, 10.0) # 调整生成的图表最大尺寸
'''
# 设置图片大小
# hue多层绘制
plt.rcParams['figure.figsize']=10,8
sns.countplot(x="salary",hue="department",data=df)

 

3.6 Histograma

# 去除异常值
df=df.dropna(how="any",axis=0)
df=df[df["last_evaluation"]<=1][df["salary"]!="nme"][df["department"]!="sale"]

# 直方图
f = plt.figure()
f.add_subplot(1,3,1)
# distplot(kde=False):不显示包围曲线
# distplot(hist=False):不显示直方图
sns.distplot(df["satisfaction_level"],kde=False,bins=10)
f.add_subplot(1,3,2)
sns.distplot(df["last_evaluation"],bins=10)
f.add_subplot(1,3,3)
sns.distplot(df["average_monthly_hours"],bins=10)
plt.show()

3.7 Diagrama de caja

#箱线图
sns.boxplot(y=df["last_evaluation"],saturation=0.75)
plt.show()

3.8 Gráfico de líneas

# 折线图
# 第一种画法
# sub_df=df.groupby("time_spend_company").mean()
# sns.pointplot(x=sub_df.index,y=sub_df["left"])

# 另一种画法
sns.pointplot(x="time_spend_company",y="left",data=df)

3.9 Gráfico circular

# lables标签
lbs=df["department"].value_counts().index
# explode:离开整体,如果某个区域等于sales,离开0.1倍的间隔
explodes=[0.1 if i=="sales" else 0 for i in lbs ]

# autopct:显示百分比,精度小数点后一位
plt.pie(df["department"].value_counts(normalize=True),explode=explodes,autopct='%1.1f%%',colors=sns.color_palette("Reds", n_colors=7),labels=lbs)
plt.show()

 

Supongo que te gusta

Origin blog.csdn.net/qq_29644709/article/details/114697327
Recomendado
Clasificación