3Matplotlib------画图详解及步骤(Matplotlib定义、添加刻度、Matplotlib中文乱码解决、添加网格、添加描述信息、添加图例、在一个坐标系中绘制多个图像、折线图)

文章目录

  • Matplotlib
    • 学习目标
    • 3.1什么是Matplotlib
      • 3.1.1 Matplotlib之HelloWorld
      • 3.1.2 为什么要学习Matplotlib
      • 3.1.3 实现一个简单的Matplotlib画图-以折线图为例
      • 3.1.4图形绘制流程:
      • 3.1.5 认识Matplotlib图像结构(了解)
    • 3.2 小结
    • 3.3 基础绘图功能一以折线图为例
    • 学习目标
    • 3.3.1 准备数据并画出初始折线图
    • 3.3.2 添加自定义x,y刻度
    • 3.3.3 中文乱码解决:
    • 3.3.4 添加网格显示
    • 3.3.5 添加描述信息
    • 3.3.6 图像保存
    • 3.4在一个坐标系中绘制多个图像
      • 3.4.1多次plot
      • 3.4.2设置图形风格
      • 3.4.3显示图例
    • 3.5 多个坐标系显示一plIt.subplots(面向对象的画图方法)
    • 3.6 折线图的应用场景
    • 3.7 小结

本文所需代码在上方下载

Matplotlib

学习目标

  • 应用Matplotlib的基本功能实现图形显示
  • 应用Matplotib现多图显示
  • 应用Matplotlib实现不同画图种类

3.1什么是Matplotlib

3.1.1 Matplotlib之HelloWorld

学习目标

  • 目标
    • 了解什么是matplotlib
    • 为什么要学习matplotlib
    • matplotlib简单图形的绘制

3Matplotlib------画图详解及步骤(Matplotlib定义、添加刻度、Matplotlib中文乱码解决、添加网格、添加描述信息、添加图例、在一个坐标系中绘制多个图像、折线图)_第1张图片

  • 是专门用于开发2D图表(包括3D图表)
  • 以渐进、交互式方式实现数据可视化

3.1.2 为什么要学习Matplotlib

可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法。
- 能将数据进行可视化,更直观的呈现
- 使数据更加客观、更具说服力
例如下面两个图为数字展示和图形展示:
3Matplotlib------画图详解及步骤(Matplotlib定义、添加刻度、Matplotlib中文乱码解决、添加网格、添加描述信息、添加图例、在一个坐标系中绘制多个图像、折线图)_第2张图片

3.1.3 实现一个简单的Matplotlib画图-以折线图为例

matplotlib.pyplot模块
matplotib.pytplot包含了一系列类似于matlab的画图函数。

import matptotlib.pyplot as plt

3.1.4图形绘制流程:

  • 1.创建画布–plt.figure()

      plt.figure(figsize=(),dpi=)
      figsize:指定图的长宽
      dpi:图像的清晰度
      返回fig对象
    
  • 2.绘制图像–plt.plot(x,y)
    以折线图为例

  • 3.显示图像–plt.show()
    3.3折线图绘制与显示
    举例:展现上海一周的天气,比如从星期一到星期日的天气温度如下

1.创建画布
import matplotlib.pyplot as plt
#1.创建画布
plt.figure(figsize=(10,10),dpi=100)

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

#3.显示图像
plt.show()

3Matplotlib------画图详解及步骤(Matplotlib定义、添加刻度、Matplotlib中文乱码解决、添加网格、添加描述信息、添加图例、在一个坐标系中绘制多个图像、折线图)_第3张图片

3.1.5 认识Matplotlib图像结构(了解)

3Matplotlib------画图详解及步骤(Matplotlib定义、添加刻度、Matplotlib中文乱码解决、添加网格、添加描述信息、添加图例、在一个坐标系中绘制多个图像、折线图)_第4张图片

3.2 小结

  • 什么是matplotib【了解】
    • 是专门用于开发2D(3D)图表的包
  • 绘制图像流程【掌握】
    • 1.创建画布–pf.figuret(figsize=(20,8))
    • 2.绘制图像–plt.plot(x,y)
    • 3.显示图像–plt.show()

3.3 基础绘图功能一以折线图为例

学习目标

  • 目标
    • 掌握给图形添加辅助功能(如:标注、x,y轴名称、标题等)
    • 知道图形的保存
    • 知道如何多次plot绘制图形
    • 知道如何多个坐标系显示图形
    • 知道折线图的应用场景

完善原始折线图-给图形添加辅助功能

为了更好地理解所有基础绘图功能,我们通过天气温度变化的绘图来融合所有的基础API使用
需求:画出某城市11点到12点1小时内每分钟的温度变化折线图,温度范围在15度~18度
效果:
3Matplotlib------画图详解及步骤(Matplotlib定义、添加刻度、Matplotlib中文乱码解决、添加网格、添加描述信息、添加图例、在一个坐标系中绘制多个图像、折线图)_第5张图片

3.3.1 准备数据并画出初始折线图


import matplotlib.pyplot as plt 
import random
#画出温度变化图
#0.准备x,y坐标的数据
x=range(60)
y_shanghai=[random.uniform(15,18)for i in x]
#1.创建画布
plt.figure(figsize=(20,8),dpi=80)
#2.绘制折线图
pLt.plot(x,y.-shanghai)
#3.显示图像
pLt.show()

3Matplotlib------画图详解及步骤(Matplotlib定义、添加刻度、Matplotlib中文乱码解决、添加网格、添加描述信息、添加图例、在一个坐标系中绘制多个图像、折线图)_第6张图片

3.3.2 添加自定义x,y刻度

  • plt.xticks(x,** kwargs)
     x:要显示的刻度值
  • plt.yticks(y,**kwargs)
     y:要显示的刻度值

#增加以下两行代码

	#构造×轴刻度标签
	x_ticks_lable = ["11点{}分".format(i) for i in x ]
	y_ticks = range(40)
	#修改x,y轴刻度显示
	plt.xticks(x[::5],x_ticks_lable[::5])
	plt.yticks(y_ticks[::5])

3Matplotlib------画图详解及步骤(Matplotlib定义、添加刻度、Matplotlib中文乱码解决、添加网格、添加描述信息、添加图例、在一个坐标系中绘制多个图像、折线图)_第7张图片

3.3.3 中文乱码解决:

  1. 查找matplotlib路径
import matplotlib
		matplotlib.matplotlib_fname()

输出路径大致如下,记住,第2步会使用:

'xxx/matplotlib/mpl-data/matplotlibrc'
  1. 安装SimHei字体
    字体链接:http://www.font5.com.cn/font_download.php?id=151&part=1237887120
    字体放到xxx/matplotlib/mpl-data/下即可

  2. 修改配置文件
    vim 打开xxx/matplotlib/matplotlibrc,或者记事本打开添加内容如下:
    3Matplotlib------画图详解及步骤(Matplotlib定义、添加刻度、Matplotlib中文乱码解决、添加网格、添加描述信息、添加图例、在一个坐标系中绘制多个图像、折线图)_第8张图片
    3Matplotlib------画图详解及步骤(Matplotlib定义、添加刻度、Matplotlib中文乱码解决、添加网格、添加描述信息、添加图例、在一个坐标系中绘制多个图像、折线图)_第9张图片
    重启jupyter即可
    解决方案二:
      在Python脚本中动态设置matplotlibrc,这样也可以避免由于更改配置文件而造成的麻烦,具体代码如下:

from pylab import mpl
#设置显示中文字体
mpl.rcParams["font.sans-serif"]=["SimHei"]


   有时候,字体更改后,会导致坐标轴中的部分字符无法正常显示,此时需要更改axes.unicode_minus参数:

#设置正常显示符号
mpl.rcParams["axes.unicode_minus"]=False

3.3.4 添加网格显示

为了更加清楚地观察图形对应的值

plt.grid(True,linestyle='--',alpha=0.5)

3.3.5 添加描述信息

添加x轴、y轴描述信息及标题
注:通过fontsize参数可以修改图像中字体的大小

plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点0分到12点之间的温度变化图示",fontsize=20)

3.3.6 图像保存

#保存图片到指定路径
ptt.savefig("fest.ng")
  • 注意:plt.show0会释放figure资源,如果在显示图像之后保存图片将只能保存空图片。
import matplotlib.pyplot as plt
from pylab import mpl
#设置显示中文字体
mpl.rcParams["font.sans-serif"]=["SimHei"]
#设置正常显示符号
mpl.rcParams["axes.unicode_minus"]=False
#0.准备x,y坐标的数据
x=range(60)
y_shanghai = [random.uniform(15,18)for i in x]

#1.创建画布
plt.figure(figsize=(20,8),dpi=80)

#2.绘制折线图
plt.plot(x,y_shanghai)

#2.1添加x,y轴刻度
x_ticks_lable = ["11点{}分".format(i) for i in x ]
y_ticks = range(40)
#修改x,y轴刻度显示
plt.xticks(x[::5],x_ticks_lable[::5])
plt.yticks(y_ticks[::5])

#2.2 添加网格显示
plt.grid(True,linestyle='--',alpha=0.5)

#2.3添加描述信息
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点0分到12点之间的温度变化图示",fontsize=20)

#2.4 保存图像
plt.savefig("./test.png")

#3.显示图像
plt.show()

3.4在一个坐标系中绘制多个图像

3.4.1多次plot

需求:再添加一个城市的温度变化
  收集到北京当天温度变化情况,温度在1度到3度。怎么去添加另一个在同一坐标系当中的不同图形,其实很简单只需要再次plot即可,但是需要区分线条,如下显示

#增加北京的温度数据
y_beijing=[random.uniform(1,3) for i in x]
#绘制折线图
plt.plot(x,y_shanghai)
#使用多次plot可以画多个折线
plt.plot(x,ybeijing,color='r',linestyle='--')

我们仔细观察,用到了两个新的地方,一个是对于不同的折线展示效果,一个是添加图例。

3.4.2设置图形风格

3Matplotlib------画图详解及步骤(Matplotlib定义、添加刻度、Matplotlib中文乱码解决、添加网格、添加描述信息、添加图例、在一个坐标系中绘制多个图像、折线图)_第10张图片

3.4.3显示图例

·注意:如果只在plt.plot0中设置label还不能最终显示出图例,还需要通过plt.legend()将图例显示出来。

#绘制折线图
plt.plot(x,y_shanghai,label = "上海")
plt.plot(x,y_beijing,color ="r",linestyle = "--",label = "北京")

#显示图例
plt.legend(loc ="best")

3Matplotlib------画图详解及步骤(Matplotlib定义、添加刻度、Matplotlib中文乱码解决、添加网格、添加描述信息、添加图例、在一个坐标系中绘制多个图像、折线图)_第11张图片
完整代码:

#0.准备x,y坐标的数据
x=range(60)
y_shanghai = [random.uniform(15,18)for i in x]
y_beijing = [random.uniform(1.,3) for i in x ]
#1.创建画布
plt.figure(figsize=(20,8),dpi=80)

#2.绘制折线图
plt.plot(x,y_shanghai,label = "上海")
plt.plot(x,y_beijing,color ="r",linestyle = "--",label = "北京")

#2.1添加x,y轴刻度
x_ticks_lable = ["11点{}分".format(i) for i in x ]
y_ticks = range(40)
#修改x,y轴刻度显示
plt.xticks(x[::5],x_ticks_lable[::5])
plt.yticks(y_ticks[::5])

#2.2 添加网格显示
plt.grid(True,linestyle='--',alpha=0.5)

#2.3添加描述信息
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点0分到12点之间的温度变化图示",fontsize=20)

# #2.4 保存图像
# plt.savefig("./test.png")

#2.5 显示图例
plt.legend(loc ="best")

#3.显示图像
plt.show()

3.5 多个坐标系显示一plIt.subplots(面向对象的画图方法)

如果我们想要将上海和北京的天气图显示在同一个图的不同坐标系当中,效果如下:
3Matplotlib------画图详解及步骤(Matplotlib定义、添加刻度、Matplotlib中文乱码解决、添加网格、添加描述信息、添加图例、在一个坐标系中绘制多个图像、折线图)_第12张图片
可以通过subplots函数实现(旧的版本中有subplot,使用起来不方便),推荐subplots函数

  • matplotib.pyplot.subplots(nrows=1,ncols=1,**fig_kw)创建一个带有多个axes(坐标系/绘图区)的图
  • 3Matplotlib------画图详解及步骤(Matplotlib定义、添加刻度、Matplotlib中文乱码解决、添加网格、添加描述信息、添加图例、在一个坐标系中绘制多个图像、折线图)_第13张图片

关于axes子坐标系的更多方法:参考https:/matplotlib.org/api/axes_api.html#matplotlib.axes.Axes

  • 注意:plt.函数名()相当于面向过程的画图方法,axes.set_方法名()相当于面向对象的画图方法。
#0.准备x,y坐标的数据
x=range(60)
y_shanghai = [random.uniform(15,18)for i in x]
y_beijing = [random.uniform(1.,3) for i in x ]
#1.创建画布
# pt.figure(figsize=(20,8),dpi=80)
fig,axes = plt.subplots(nrows=1,ncols=2,figsize = (20,8),dpi = 100)

#2.绘制折线图
# plt.plot(x,y_shanghai,label = "上海")
# plt.plot(x,y_beijing,color ="r",linestyle = "--",label = "北京")
axes[0].plot(x,y_shanghai,label = "上海")
axes[1].plot(x,y_beijing,color ="r",linestyle = "--",label = "北京")

#2.1添加x,y轴刻度
x_ticks_lable = ["11点{}分".format(i) for i in x ]
y_ticks = range(40)

# #修改x,y轴刻度显示
# plt.xticks(x[::5],x_ticks_lable[::5])
# plt.yticks(y_ticks[::5])
axes[0].set_xticks(x[::5])
axes[0].set_yticks(y_ticks[::5])
axes[0].set_xticklabels(x_ticks_lable[::5])
axes[1].set_xticks(x[::5])
axes[1].set_yticks(y_ticks[::5])
axes[1].set_xticklabels(x_ticks_lable[::5])

# #2.2 添加网格显示
# plt.grid(True,linestyle='--',alpha=0.5)
axes[0].grid(True,linestyle='--',alpha=0.5)
axes[1].grid(True,linestyle='--',alpha=0.5)

#2.3添加描述信息
# plt.xlabel("时间")
# plt.ylabel("温度")
# plt.title("中午11点0分到12点之间的温度变化图示",fontsize=20)
axes[0].set_xlabel("时间")
axes[0].set_ylabel("温度")
axes[0].set_title("中午11点0分到12点之间的温度变化图示",fontsize=20)
axes[1].set_xlabel("时间")
axes[1].set_ylabel("温度")
axes[1].set_title("中午11点0分到12点之间的温度变化图示",fontsize=20)

#2.4 保存图像
plt.savefig("./test.png")

#2.5 显示图例
# plt.legend(loc ="best")
axes[0].legend(loc ="best")
axes[1].legend(loc ="best")

#3.显示图像
plt.show()

3.6 折线图的应用场景

  • 呈现公司产品(不同区域)每天活跃用户数
  • 呈现app每天下载数量
  • 呈现产品新功能上线后,用户点击次数随时间的变化
  • 拓展:画各种数学函数图像
    - 注意:plt.plot()除了可以画折线图,也可以用于画各种数学函数图像
    3Matplotlib------画图详解及步骤(Matplotlib定义、添加刻度、Matplotlib中文乱码解决、添加网格、添加描述信息、添加图例、在一个坐标系中绘制多个图像、折线图)_第14张图片
import numpy as np

#0.准备数据
x=np.linspace(-10,10,1000)
y=np.sin(x)

#1.创建画布
plt.figure(figsize=(20,8),dpi=100)

#2.绘制函数图像
plt.plot(x,y)

#2.1添加网格显示
plt.grid()

#3.显示图像
plt.show()

3.7 小结

  • 添加x,y轴刻度【知道】
    - plt.xticks()
    - plt.yticks()
    - 注意:在传递进去的第一个参数必须是数字,不能是字符串,如果是字符串吗,需要进行替换操作
  • 添加网格显示【知道】
    - plt.grid(linestyle="–",alpha=().5)
  • 添加描述信息【知道】
    - plt.xlabel()
    - plt.ylabel()
    - plt.title()
  • 图像保存【知道】
    - plIt.savefig(“路径")
  • 多次plot【了解】
    - 直接进行添加就OK
  • 显示图例【知道】
    - plIt.legend(loc=“best”)
    - 注意:一定要在plt.plot()里面设置一个label,如果不设置,没法显示
  • 多个坐标系显示【了解】
    - plt.subplots(nrows=,ncols=)
  • 折线图的应用【知道】
    - 1.应用于观察数据的变化
    - 2.可是画出一些数学函数图像
    点个赞吧!!!你的鼓励是对我码字的认可

你可能感兴趣的:(人工智能,机器学习,机器学习)