matplotlib数据可视化教程

matplotlib数据可视化教程

python一站式学习->: python一站式学习,python基础,数据类型,numpy,pandas,机器学习,NLP自然语言处理,deepseek大预言模型,Tensorflow,CV视觉


  • 安装 matplotlib 包, 和numpy依赖包(方便造数据而已,不是matplotil必须依赖的包)
pip install matplotlib
pip install numpy
  • matplotlib三层结构:
FigureCanvas (画板层)
    │
    └── Figure (画布层/图像容器)
            │
            ├── Axes (绘图区/坐标系,核心容器)
            │   ├── Axis (坐标轴,辅助显示层)
            │   ├── Tick (刻度,辅助显示层)
            │   ├── Label (坐标轴标签/标题,辅助显示层)
            │   └── Plot (图像层:折线、柱状图等)
            │
            └── Legend (图例,辅助显示层)

官网案例教程 ->: https://matplotlib.org/stable/gallery/index.html


入门demo

# 引入包
import matplotlib.pyplot as plt

# 创建画布   figsize 指定图的大小,dpi 指定图像的清晰度
plt.figure(figsize=(10,5),dpi=60)

# 绘制折线图
plt.plot([1,2,3,4,5,6,7],[5,4,18,5,4,1,8])

# 保存图像
plt.savefig("折线图.png")

# 展示图像
plt.show()

在这里插入图片描述
前几个图备注比较详细,可以根据

1. 绘制折线图

# 绘制山顶,山脚温度变化折线图

import matplotlib.pyplot as plt
import random

# 指定中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
# 修复负号显示问题
plt.rcParams['axes.unicode_minus'] = False

#---------------------------准备数据-----------------------------
x = range(61)
# 使用推导式,生成x个温度值,温度值10到20之间
y_shanjiao = [random.uniform(10,20) for i in x]
# 使用推导式,生成x个温度值,温度值-8到-18之间
y_shanding = [random.uniform(-8,-18) for i in x]

#---------------------------绘制--------------------------------
# 创建画布 figsize 指定图的大小,dpi 指定图像的清晰度
plt.figure(figsize=(12,4),dpi=80)

# 绘制 color="r" 线条红色 
# linestyle='--' 虚线
# label ='山脚'   图例名称
plt.plot(x,y_shanjiao,color="r",linestyle='--',label='山脚')
plt.plot(x,y_shanding,color='b',label='山顶')

#---------------------------修改图例和,xy坐标刻度-----------------------
#显示图例,loc=4控制图例位置右下角,其他位置可自行调整数字实验
plt.legend(loc=4)

#修改xy刻度
plt.yticks(range(-20,45,10))
x_str =['11点{}分'.format(i) for i in x]
plt.xticks(x[::5],x_str[::5])
#添加网格
plt.grid(linestyle='--',alpha=0.3)
#添加图标题
plt.title('山顶、山脚23点至24点温差变化图')
# 添加x轴标题
plt.xlabel('时间')
# 添加y轴标题
plt.ylabel('温度')
# 显示
plt.show()

在这里插入图片描述

绘制多图

import matplotlib.pyplot as plt
import random

# 指定中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
# 修复负号显示问题
plt.rcParams['axes.unicode_minus'] = False

#---------------------------准备数据--------------------------------
x = range(61)
# 使用推导式,生成x个温度值,温度值10到20之间
y_shanjiao = [random.uniform(10,20) for i in x]
# 使用推导式,生成x个温度值,温度值0到10之间
y_shanding = [random.uniform(0,10) for i in x]

#---------------------------绘制--------------------------------
#创建多个画布区域  nrows=1,ncols=2 
#figsize 指定图的大小,dpi 指定图像的清晰度
figure,axes = plt.subplots(nrows=1,ncols=2,figsize=(15,4),dpi=80)
# 绘制 color="r" 线条红色 
# linestyle='--' 虚线
# label ='山脚'   图例名称
axes[0].plot(x,y_shanjiao,color="r",linestyle='--',label='山脚')
axes[1].plot(x,y_shanding,color='b',label='山顶')

#---------------------------修改图例和,xy坐标刻度-----------------------
#显示图例,并控制图例位置
axes[0].legend(loc=0)
axes[1].legend(loc=0)
#修改xy刻度
x_str =['11点{}分'.format(i) for i in x]
axes[0].set_xticks(x[::10],x_str[::10])
axes[0].set_yticks(range(-10,30,10))

axes[1].set_xticks(x[::10],x_str[::10])
axes[1].set_yticks(range(-10,35,10))
#添加网格
axes[0].grid(linestyle='--',alpha=0.3)
# 添加图标题
axes[0].set_title('山顶温差变化图')
# 添加x轴标题
axes[0].set_xlabel('时间')
# 添加y轴标题
axes[0].set_ylabel('温度')

axes[1].grid(linestyle='--',alpha=0.3)
axes[1].set_title('山脚温差变化图')
axes[1].set_xlabel('时间')
axes[1].set_ylabel('温度')
plt.show()

在这里插入图片描述

绘制一个数学式


##绘制数学公式函数   y = 2 * x ^2
import numpy as np
import matplotlib.pyplot as plt
# -10 到10直接 1000个数
x = np.linspace(-10,10,1000)
y = 2*x*x
plt.figure(figsize=(10,8),dpi=60)
plt.plot(x,y,color='r',linestyle='--',label='y=2x^2')
plt.legend(loc=5)
plt.title('y=2x^2函数图像')
plt.grid(linestyle='--',alpha=0.2)
#labelpad参数控制标签与坐标轴的垂直间距(单位:像素)
#plt.xlabel('x', labelpad=5)
plt.xlabel('x')
plt.ylabel('y')
# ax = plt.gca()  # 获取当前坐标轴对象,精细控制坐标标签位置
# ax.xaxis.set_label_coords(0.01,- 0.05)
# ax.yaxis.set_label_coords(-0.01, 0.02)
plt.show()

在这里插入图片描述

##绘制数学公式函数   y = cos(x) y = sin(x)
import numpy as np
import matplotlib.pyplot as plt
# -10 到10直接 1000个数
x = np.linspace(-10,10,1000)
y = np.cos(x)
y2 = np.sin(x)
plt.figure(figsize=(10,8),dpi=60)
plt.plot(x,y,color='r',linestyle='--',label='y = cos(x)')
plt.plot(x,y2,color='b',linestyle='--',label='y = sin(x)')
plt.legend(loc=5)
plt.title('y = cos(x) y=sin(x)函数图像')
plt.grid(linestyle='--',alpha=0.2)
#labelpad参数控制标签与坐标轴的垂直间距(单位:像素)
#plt.xlabel('x', labelpad=5)
plt.xlabel('x')
plt.ylabel('y')
# ax = plt.gca()  # 获取当前坐标轴对象,精细控制坐标标签位置
# ax.xaxis.set_label_coords(0.01,- 0.05)
# ax.yaxis.set_label_coords(-0.01, 0.02)
plt.show()

在这里插入图片描述

绘制一个散点图


import matplotlib.pyplot as plt

x = [i+random.random() for i in range(0,100,2)]
y = [i+random.uniform(0,8) for i in range(0,100,2)]
plt.figure(figsize=(10,8),dpi=80)
plt.scatter(x,y)
plt.show()

在这里插入图片描述

绘制一个柱状图

import matplotlib.pyplot as plt

x = ['语文','数学','生物','化学','地理','历史','政治']
y = [random.uniform(40,100) for i in x]

plt.figure(figsize=(10,8),dpi=80)

plt.bar(x,y,color=['b','r','g','y','c','m','k'])
plt.title('各科成绩柱状图')
plt.grid(linestyle='--',alpha=0.3)
plt.show()

在这里插入图片描述

绘制两组柱状图进行对比

import matplotlib.pyplot as plt

x = ['语文','数学','生物','化学','地理','历史','政治']
y = [random.uniform(40,100) for i in x]
y2 = [random.uniform(40,100) for i in x]

#绘制
plt.figure(figsize=(10,8),dpi=80)
plt.bar(range(len(x)),y,color='g',width=0.3,label='张三')
plt.bar([i+0.3 for i in range(len(x))],y2,color='c',width=0.3,label='李四')
#显示图例
plt.legend()
plt.title('各科成绩柱状图')
plt.grid(linestyle='--',alpha=0.3)
plt.xticks([i+0.15 for i in range(len(x))],x)

plt.show()

在这里插入图片描述

绘制一个直方图

import matplotlib.pyplot as plt

sept =range(0,100,10)
x = [random.uniform(20,100) for i in range(1000)]

plt.figure(figsize=(10,8),dpi=80)

#bins=sept 直方图步长   density=Truey轴把频次转换成频率
plt.hist(x,bins=sept,color='g',density=True)

plt.title('年级成绩分布直方图')
plt.grid(linestyle='--',alpha=0.3)
plt.xticks(sept)


plt.show()

在这里插入图片描述

绘制一个饼图

import matplotlib.pyplot as plt

city =['西安','安康','宝鸡','汉中','咸阳','延安']
people = [random.randint(100000,10000000) for i in city]

plt.figure(figsize=(10,8),dpi=80)

#bins=sept 直方图步长   density=Truey轴把频次转换成频率
plt.pie(people,labels=city,autopct="%1.2f%%",colors=['b','r','g','y','c','m'])

plt.legend()
plt.title('陕西人口分布饼图')
plt.show()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值