Matplotlib

本文详细介绍了Python的Matplotlib库在数据可视化中的应用,包括matplotlib的三层结构:容器层、图像层和辅助显示层。通过实例展示了如何创建画布、绘制简单图形、设置辅助元素如刻度、网格、描述信息和图例。此外,还涵盖了折线图、散点图、柱状图、直方图和饼图等常见图像的绘制方法,以及如何在同一个坐标系或多个坐标系中绘制多图,并介绍了图形保存的功能。
摘要由CSDN通过智能技术生成

一、matplotlib的三层结构

1.容器层
包含
\quad canvas,最底层的系统层,充当画板的角色。
\quad figure,canvas上方的应用层的第一层,充当画布的角色。
\quad axes,figure上方的应用层的第二层,充当绘图区/坐标系。

2.图像层
指在axes上通过plot,scatter等函数根据数据绘制出的图像

3.辅助显示层
指在axes上的除了根据数据绘制出的图像以外的内容,eg 外观(facecolor),边框线(spines),坐标轴(axis),坐标轴名称(axis label),刻度(tick),标题(title),图例(legend),网格线(grid)等。该层主要给图形添加描述性信息等,使得图形更加直观,不影响图像的显示效果。

注意:
1)canvas位于最底层为系统层,用户一般接触不到;figure位于canvas之上;axes位于figure之上;axis、grid等辅助层以及图像层位于axes之上。
2)figure指整个图形,可以通过plt.figure()设置画布的大小和分辨率等;axes是数据的绘图区域/坐标系;axis是坐标系中的坐标轴,包含大小限制,刻度等。
2)一个figure可以有多个axes,一个axes可以有多个axis,包含2个则对应的axes为2D坐标系。

二、简单图形绘制

\quad matplotlib绘图主要内容在图像层和辅助显示层,而容器层的figure只需要plt.figure()创建即可,默认一个figure有一个axes,可以通过subplot实现多个axes的多图绘制。

图形绘制的基本步骤: 准备数据→创建画布→绘制图像→显示图像

import matplotlib.pyplot as plt
import random
#0、数据
x=range(0,20)
y=[random.uniform(10,30) for i in range(0,20)]
#1、创建画布
plt.figure()
#2、绘制图像
plt.plot(x,y)
#3、图像显示
plt.show()

在这里插入图片描述

三、辅助显示层

1.显示刻度

import matplotlib.pyplot as plt
import random
from pylab import mpl
#设置显示字体
mpl.rcParams['font.sans-serif']=['SimHei']
#设置正常显示符号
mpl.rcParams['axes.unicode_minus']=False
# 0、准备数据
x=range(1,21)
y=[random.uniform(10,30) for i in range(0,20)]
# 1、创建画布
plt.figure(figsize=(20,8))
# 2.绘制图像
plt.plot(x,y)
# 3.辅助显示层——设置刻度
xlabel=['1月{}号'.format(i) for i in x]
plt.xticks(x[::5],xlabel[::5]) #两个参数的大小要一致
# 4、图像显示
plt.show()

在这里插入图片描述

2.添加网格

#linestyle为网格线的类型,‘--’为虚线,alpha为网格线的清晰度0-1
plt.grid(True,linestyle='--',alpha=0.5)

在这里插入图片描述

plt.grid()

在这里插入图片描述

3.添加描述信息

\quad 包括x,y轴标签和标题

plt.xlabel('日期')
plt.ylabel('温度')
plt.title('1月的气温变化')

在这里插入图片描述

4.显示图例

\quad 需要在绘制图像的函数中设置label,然后利用legend显示出来。

import matplotlib.pyplot as plt
import random

#需要在plot中设置label,然后利用legend显示出来
# 0、准备数据
x=range(1,32)
y1=[random.uniform(30,50) for i in x]
y2=[random.uniform(30,50) for i in x]
xlabel=["1月{}日".format(i) for i in x]
# 1、创建画布
plt.figure()
# 2、绘制图像
plt.plot(x,y1,label='家里')
plt.plot(x,y2,color='green',linestyle='--',label='学校')#图像风格
# 3、辅助层——设置刻度,网格线,描述信息,图例
plt.xticks(x[::5],xlabel[::5])
plt.grid(True,linestyle='--',alpha=0.5)
plt.xlabel('日期')
plt.ylabel('温度')
plt.title('1月的气温变化')
#设置图例显示的位置参数:'best' ,'right','upper right'等等
plt.legend(loc='best') #自动显示一个合适的位置
# 4、图像显示
plt.show()

在这里插入图片描述

四、图像层(常见图像)

折线图,散点图,柱状图,直方图,饼图

1.折线图

import matplotlib.pyplot as plt 
import random
#0、数据
x=range(0,20)
y=[random.uniform(10,30) for i in range(0,20)]
#1、创建画布
plt.figure()
#2、绘制图像plot
plt.plot(x,y,color='green',linestyle='--')
#3、图像显示
plt.show()

在这里插入图片描述

2.散点图

import matplotlib.pyplot as plt 
import random
#0、数据
x=range(0,20)
y=[random.uniform(10,30) for i in range(0,20)]
#1、创建画布
plt.figure()
#2、绘制图像scatter
plt.scatter(x,y,color='green')
#3、图像显示
plt.show()

在这里插入图片描述

3.柱状图

# 常见参数:plt.bar(x,y,width,align='center',**kwargs) 
#x, y需要传递的数据,width柱的宽度  align柱的对齐方式 
import matplotlib.pyplot as plt 
# 0、准备数据
y=[100,78,66,88]
x=range(1,5)
# 1、创建画布
plt.figure()
# 2、绘制图像bar
plt.bar(x,y,width=0.5)
xlabel=['大{}'.format(i) for i in x]
# 3、辅助层——设置刻度,添加描述性信息,网格线
plt.xticks(x,xlabel)
plt.xlabel('年级')
plt.ylabel('数量')
plt.title('学生人数情况')
plt.grid('True',linestyle='--',alpha=0.3)
# 4、显示图像
plt.show()

在这里插入图片描述

4.直方图

# plt.hist(y,bins=None) 
# y需要传递的参数,bins为组距

import numpy as np
import matplotlib.pyplot as plt 
# 0、准备数据
y=[np.random.normal(85,3) for i in range(10000)]

# 1、创建画布
plt.figure()
# 2、绘制图像hist
plt.hist(y,100)
# 3、辅助层
plt.title('学生成绩情况')
plt.grid('True',linestyle='--',alpha=0.3)
# 4、显示图像
plt.show()

在这里插入图片描述

5.饼图

#  plt.pie(x,labels,autopct,colors)
# x百分比,labels每部分的名称,autopct占比显示,colors每部分颜色
import matplotlib.pyplot as plt 
# 0、准备数据
x=[100,78,66,88]
# x=range(1,5)
xlabel=['大{}'.format(i) for i in range(1,len(x)+1)]
# 1、创建画布
plt.figure()
# 2、绘制图像撇
plt.pie(x,labels=xlabel)
# 3、辅助层
plt.title('学生人数情况')
# 4、显示图像
plt.show()

在这里插入图片描述

五、其他功能

1.绘制多图

①绘制图像时,多次调用绘图函数可在一个坐标系上绘制多个图像

#多次plot
import matplotlib.pyplot as plt
import random
x=range(1,32)
y1=[random.uniform(30,50) for i in x]
y2=[random.uniform(30,50) for i in x]
xlabel=["1月{}日".format(i) for i in x]
plt.figure()

plt.plot(x,y1,label='家里')
plt.plot(x,y2,color='green',linestyle='--',label='学校')#图像风格

plt.xticks(x[::5],xlabel[::5])
plt.grid(True,linestyle='--',alpha=0.5)
plt.xlabel('日期')
plt.ylabel('温度')
plt.title('1月的气温变化')
plt.legend(loc='best') #自动显示一个合适的位置

plt.show()

在这里插入图片描述
② 面向对象绘制多个坐标系绘制多个图,subplot

import matplotlib.pyplot as plt
import random
#一、准备数据
x=range(1,32)
y1=[random.uniform(30,50) for i in x]
y2=[random.uniform(40,60) for i in x]
xlabel=['1月{}日'.format(i) for i in x]


#二、创建画布,返回图对象fig和对应序号的坐标系axes
# nrows,ncols 设置有几行几列的坐标系

fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=100)


#三、面向对象绘图,利用axes
axes[0].plot(x,y1,label='家里')
axes[1].plot(x,y2,color='green',linestyle='--',label='学校')#图像风格

#四、辅助层

# 1.网格线
axes[0].grid(True,linestyle='--',alpha=0.5)
axes[1].grid(True,linestyle='--',alpha=0.5)

# 2.刻度 set
axes[0].set_xticks(x[::5])
axes[0].set_xticklabels(xlabel[::5])
axes[1].set_xticks(x[::5])
axes[1].set_xticklabels(xlabel[::5])

#3.添加描述 set
axes[0].set_xlabel('时间')
axes[0].set_ylabel('气温')
axes[0].set_title('1月家里的气温变化')
axes[1].set_xlabel('时间')
axes[1].set_ylabel('气温')
axes[1].set_title('1月学校的气温变化')

#4.添加图例
axes[0].legend(loc='best')
axes[1].legend(loc='best')

#五、显示
plt.show()

在这里插入图片描述

2.图形保存

plt.savefig(图片保存路径)
import matplotlib.pyplot as plt
import random
x=range(0,20)
y=[random.uniform(10,20) for i in x]

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

plt.savefig('test.png') #保存图片在show 之前
#show()会释放figure资源,如果显示图像之后保存图片将只能保存空图片

plt.show()

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yun_gao_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值