5 数据分析——matplotlib


导包

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

运行时需要配置参数
rcParams:runtime configuration Parameters

如果浏览器不显示图片,就需要加上这句话
%matplotlib inline

让图片显示中文
plt.rcParams[‘font.sans-serif’] = ‘SimHei’

让图片中可以显示负号
plt.rcParams[‘axes.unicode_minus’] =False

支持矢量图
%config Inlinebackend.figure_format = ‘svg’

查看自己电脑中的字体

from matplotlib.font_manager import FontManager

fm = FontManager()
my_fonts = set(f.name for f in fm.ttflist)
my_fonts

基本绘图

颜色: color = ‘b’,‘g’,‘r’,‘c’,‘m’,‘y’,‘k’,‘w’
样式line style:ls = ‘-’,‘–’,‘-.’ ,‘:’,逗号’,’ ,‘o’,‘^’,‘<’,‘>’,‘s’,‘+’
‘b–’ 蓝色虚线

# 基本绘图
x= np.linspace(-5,5,50)   # 把-5,5 之间分成50份
y = x**2
# 画布配置
# figsize 画布大小,宽高.dpi:分辨率,像素密度
# facecolor:北京颜色
plt.figure(figsize=(5,3),dpi=200,facecolor='r')

# 设置网格
plt.grid()
# 折线图
plt.plot(x,y,color='r')

show()的用法

# 在一个画布上绘制多张图
x = np.linspace(0,8)
plt.plot(x,np.sin(x))
plt.show()# 立刻显示完上面的一个 重新显示下面的一个绘图
plt.plot(x,np.cos(x),'go')

Matplotlib 多图布局

均匀分布

子图 subplot
fig = plt.figure(figsize=(6,4))   # 画布配置

x = np.linspace(-np.pi,np.pi,30)
y = np.sin(x)

ax1 = plt.subplot(221)   # 表示两行两列中的第一个图
ax1.plot(x,y)
ax1.set_title('子图1')

ax2 = plt.subplot(222)   # 表示两行两列中的第2个图
ax2.plot(x,y)
ax2.set_title('子图2')

ax3 = plt.subplot(2,2,3)   # 表示两行两列中的第3个图
ax3.plot(x,y)
ax3.set_title('子图3')

ax4 = plt.subplot(2,2,4)   # 表示两行两列中的第4个图
ax4.plot(x,y)
ax4.set_title('子图4')

#自动调整布局
fig.tight_layout()   
fig = plt.figure(figsize=(6,4))   # 画布配置

x = np.linspace(-np.pi,np.pi,30)
y = np.sin(x)

ax1 = plt.subplot(221)   # 表示两行两列中的第一个图
ax1.plot(x,y)


ax2 = plt.subplot(222)   # 表示两行两列中的第2个图
ax2.plot(x,y)

ax3 = plt.subplot(2,1,2)   # 表示两行一列中的第二行
ax3.plot(x,np.sin(x*x))
subplots
# 设置成3行3列的图 
fig,ax = plt.subplots(3,3)
ax1,ax2,ax3=ax
ax11,ax12,ax13 =ax1
ax21,ax22,ax23 =ax2
ax31,ax32,ax33 = ax3

# fig设置画布的大小
fig.set_figwidth(8)
fig.set_figheight(8)

# 画图
ax11.plot(x,np.sinh(x))
ax12.plot(x,np.cosh(x))
ax13.plot(x,np.tanh(x))

ax21.plot(x,np.sin(x))
ax22.plot(x,np.cos(x))
ax23.plot(x,np.tan(x))

ax31.plot(x,np.tan(x))
ax32.plot(x,np.power(x,2))
ax33.plot(x,np.square(x))


# 如果图形有一些重叠
plt.tight_layout()

图形嵌套

fig = plt.figure(figsize=(8,5))

#子图1
axes1 = fig.add_subplot(1,1,1)
axes1.plot([0,1],[1,3])

# 嵌套一个图 方法一
axes2 = fig.add_subplot(2,2,1,facecolor ='pink')
axes2.plot([0,1],[1,3])

# 嵌套图 方法二
# left,bottom,width,height
axes3=plt.axes([0.5,0.5,0.4,0.38])
axes3.plot(x,x*x)

# 嵌套图 方法三
axes4 = fig.add_axes([0.12,0.11,0.38,0.38])
axes4.plot(x,x*x*x)

共享轴域

# 图1
axes1 = plt.gca()   #得到当前轴域
axes1.plot(x,np.exp(x),c='r')
axes1.set_xlabel('时间')        #x轴标签
axes1.set_ylabel('exp',c='r')
axes1.tick_params(axis='y',labelcolor='r')   # y轴刻度

# 图2
axes2 = axes1.twinx()   #表示和图一共享x轴
axes2.plot(x,np.power(x,2),'g-.')
axes2.set_ylabel('x^2')
axes2.tick_params(axis='y',labelcolor='g')

图例

plt.legend() #需要在plot中添加label='name’才可以将图例的信息显示出来
plt.legend([‘sin’,‘cos’]) # 不需要再plot中添加任何信息,中括号,第一条线的名字,第二条线的名字等等,,

plt.legend(['sin','cos'],
          fontsize = 18,
          loc='center',
          ncol =2, #显示成两列,默认为一列
           
           #图例的具体位置[x,y,width,height]
           bbox_to_anchor = [0,1,1,0.2] 
          )

线条属性

color: 颜色
linestyle:样式
linewidth:线条宽度
alphs:线的透明度,[0,1]
marker:标记
markersize:标记大小
mfc: marker face color标记背景颜色
markeredgecolor: 标记的边缘颜色

# 图例
plt.plot(x,np.sin(x),c='r',marker='p',linestyle=':',linewidth='3',label='sin',mfc='k')
#plt.legend()

plt.plot(x,np.cos(x),c='pink',marker='.',linestyle=':',linewidth='5',label='cos',mfc='m')
plt.legend()

坐标轴刻度

xticks
yticks

plt.xticks(ticks = np.arange(0,11,1),fontsize=20,color='red')
plt.yticks([-1,0,1]    #刻度值,刻度大小
			labels=['min','0','max'],
			ha='right'   # y轴的水平对齐方式

)

设置坐标轴范围

plt.xlim(-5,8)
plt.ylim(-2,2)

plt.axis([-5,8,-2,2])

option: off不显示坐标轴,equal:让x轴和y轴 刻度距离相同 scaled:自动缩放 tight:紧凑型自动适配图片square:让图的大小类似于正方形的大小
plt.axis(‘scaled’) #不显示坐标轴

标题和网格

title
grid

plt.title('sin',fontsize=20,loc='center')
plt.suptitle('--20240318父标题', y=0.3, #设置位置
             fontsize=18
            )
# 网格线
plt.grid()
plt.grid(ls='--',lw=0.5,c='gray', axis='y')  #只显示y轴的

标签

plt.xlabel('y=sin(x)',fontsize=18,rotation=45)
plt.ylabel('y=sin(x)',rotation=0,horizontalalignment='right')   # rotation 默认为90

文本

plt.text(0,0.25,'hello')

for a,b in zip(x,np.sin(x)):
    plt.text(a,b+0.3,
             s=np.round(b,2), #文本内容
             fontsize=10,
             color='k',
             ha='left',    #水平居中
             va='center'   #垂直居中
            )

注释

annotate

plt.annotate(
text='最大值',
    xy=(2,1),   #标注的坐标点,箭头指向的位置
    xytext=(2,0.25),   #标注内容的位置
    #箭头样式
    arrowprops={
        'width':3,  # 箭头线的宽度
        'headwidth':8, #箭头头部的宽度
        'facecolor':'blue'   #箭头的背景颜色
    }
)

保存图片

savefig 存储画布

plt.savefig(fname='sin.png',#支持png,jpg等
           dpi=200,
            facecolor='yellow',
            pad_inches = 1   # 最边上与图片的距离
           )

matplotlib 常用视图

折线图

plt.plot()

柱形图/条形图

plt.bar(data.月份,data.语文)

plt.figure(figsize=(5,3))
plt.title('年度销售额')
plt.xlabel('年份')
plt.ylabel('销售额')

plt.bar(x,y,width=0.9)

for a,b in zip(x,y):
    plt.text(x=a,y=b,
             s='{:.1f}万'.format(b/10000),
             ha='center',
             fontsize=9

)
簇状柱形图
x=bf2.年份
y1,y2,y3=bf2.北区,bf2.中区,bf2.南区
w=0.2
plt.bar(x-w,y1,width=w)
plt.bar(x,y2,width=w)
plt.bar(x+w,y3,width=w)
堆叠柱状图
plt.bar(x,y1,)
plt.bar(x,y2,bottom=y1)
plt.bar(x,y3,bottom=y1+y2)
条形图

plt.barh()

直方图

plt.hist()

# bins:分组
#plt.hist(x,bins=5)
# 左闭右开
plt.hist(x,bins=[0,3,6,9,10])
plt.xticks(range(10))
plt.show()

箱形图

plt.boxplot()
空心点:异常值
上界,上四分位3/4,中位数2/4,下四分位1/4,下界
四分位距:3/4的值-1/4的值
如果a>四分位距*1.5 这为异常值

# 箱形图
x=[1,2,3,4,5,6,20]
plt.boxplot(x)
plt.show()

# 一次画多个箱形图
x1 = np.random.randint(10,100,100)
x2 = np.random.randint(30,100,100)
x3 = np.random.randint(60,100,100)
plt.boxplot([x1,x2,x3])

#
data=np.random.normal(size=(500,4))
labels=list('ABCD')

plt.boxplot(data,
            labels=labels,
            notch=True, # 箱型图样式
            sym='r*'  # 异常值的颜色和形状
           )
plt.show()

散点图

plt.scatter(x,y)
plt.hexbin(x,y)

# 气泡图
plt.figure(figsize=(5,3))
data = np.random.randn(100,2)
s=np.random.randint(50,200,size=100)   #控制点的大小
c=np.random.randn(100)       # 控制点的颜色
plt.scatter(data[:,0],data[:,1],s=s,c=c,alpha=0.6)

# 六边形
plt.hexbin(x,y,gridsize=20,cmap='rainbow')

饼图

x=[10,20,30,40]
plt.pie(x,autopct='%.0f')    #不保留小数
#plt.pie(x,autopct='%.2f%%')   #保留2位小数并显示%
plt.show()
plt.figure(figsize=(4,4))
plt.pie(df.销量,autopct='%.1f%%',
       pctdistance =0.8, # 百分比文字距离圆心的位置
        labels=citys,  #标签
        labeldistance=1.3,
        #shadow=True    #阴影
        textprops={'fontsize':12,'color':'yellow'},  # 文字样式
        # 呈现分类效果
        explode=[0,0,0,0,0.6,0,0,0,0,0]
       )

甜甜圈

plt.figure(figsize=(4,4))
plt.pie(df.销量,autopct='%.1f%%',
       pctdistance =0.8, # 百分比文字距离圆心的位置
        labels=cap,  #标签
       
        textprops={'fontsize':9,'color':'black'},  # 文字样式
        # 甜甜圈,width控制中间小圆的大小,edgecolor控制各个圆环之间的颜色
        wedgeprops={'width':0.4,'edgecolor':'w'}
       )

多个圈

plt.figure(figsize=(6,6))
plt.pie(values1,autopct='%.1f%%',
       pctdistance =0.8, # 百分比文字距离圆心的位置
        labels=cap,  #标签
       
        textprops={'fontsize':9,'color':'black'},  # 文字样式
        # 甜甜圈,width控制中间小圆的大小,edgecolor控制各个圆环之间的颜色
        #wedgeprops={'width':0.4,'edgecolor':'w'}
       )

# 第二个图
plt.pie(
x=values2,
    autopct='%.1f%%',
    pctdistance=0.8,
    textprops={'fontsize':9},
    #半径
    radius=0.6
)
plt.legend()

面积图

plt.stackplot(x,y)

plt.stackplot(x,y)
plt.plot(x,y)
plt.show()

热力图

plt.figure(figsize=(14,10))
#热力图
plt.imshow(data,cmap='Blues')
#修改刻度
plt.xticks(range(len(x)),x)
plt.yticks(range(len(y)),y)

# 显示数值
for i in range(len(x)):
    for j in range(len(y)):
        plt.text(
        x=i,
            y=j,
            s=data[j,i],
            ha='center',
            va='center',
            fontsize=10
        )
plt.colorbar()   # 显示颜色条

极坐标图

N=8

x=np.linspace(0,2*np.pi,N,endpoint=False)
height=np.random.randint(3,15,size=N)
color = np.random.rand(8,3)

# 画图
#polar:极坐标
axes=plt.subplot(111,projection='polar')
axes.bar(x=x,height=height,width=2*np.pi/N,bottom=0,color=color)

雷达图

至少要三个点

N=8

x=np.linspace(0,2*np.pi,N,endpoint=False)
y=np.sin(x)

#有些图形没有闭合,需要手动闭合
x=np.concatenate((x,[x[0]]))
y=np.concatenate((y,[y[0]]))

axes=plt.subplot(111,polar=True)
axes.plot(x,y,'o-',lw=2)
axes.fill(x,y,alpha=0.3)

# 显示刻度
axes.set_rgrids([0.2,0.4,0.6,0.8],fontsize=12)

等高线图

x=np.linspace(-5,5,100)
y=np.linspace(-5,5,100)

X,Y = np.meshgrid(x,y)
Z=np.sqrt(X**2+Y**2)
# 画等高线
cp = plt.contourf(X,Y,Z)
plt.colorbar(cp)
plt.show()

相关推荐

  1. 5 数据分析——matplotlib

    2024-03-23 15:00:02       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-23 15:00:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-23 15:00:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-23 15:00:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-23 15:00:02       20 阅读

热门阅读

  1. 【Qt5】QVariant

    2024-03-23 15:00:02       19 阅读
  2. 渔夫码头密语: 记录使用 Docker 安装 Wordpress

    2024-03-23 15:00:02       21 阅读
  3. ARP攻击是什么

    2024-03-23 15:00:02       21 阅读
  4. 蓝桥集训之格子游戏

    2024-03-23 15:00:02       19 阅读
  5. 基于FPGA实现的UDP协议栈设计_汇总

    2024-03-23 15:00:02       18 阅读
  6. 使用 `acme.sh` 申请 `Let‘s Encrypt` 证书部署服务器

    2024-03-23 15:00:02       19 阅读
  7. 哈工大sse C语言 困难

    2024-03-23 15:00:02       20 阅读
  8. 【华为OD机试】小明找位置【C卷|100分】

    2024-03-23 15:00:02       20 阅读
  9. 数据结构奇妙旅程之冒泡排序

    2024-03-23 15:00:02       20 阅读
  10. PHP7 用 Exception catch不到error,Throwable 才可以

    2024-03-23 15:00:02       18 阅读