【python 的各种模块】(5) 在python使用matplotlib库来画图

2023-12-27 16:10

本文主要是介绍【python 的各种模块】(5) 在python使用matplotlib库来画图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

0 matplotlib 官方文档查询最直接/权威

0.1 官方文档

0.2 plt 画图的特别备注:避免乱码负号等问题

0.2.1 注意乱码问题解决

0.2.2 注意python的代码大小写

1 matplotlib的基本用法 (画图流程)

1.1 需要用到的模块,需要实现安装,且导入

1.1.1 导入 import matplotlib.pyplot

1.1.2 matplotlib 词源

1.2 figure  画图容器/ 画布

1.2.1 figure的官方解释

1.2.2 必须先获取至少1个figure:

1.2.3 多个figure存在时,figure的生效范围

1.2.4 因为可以一段代码里存在多个plt.figure(),因此可以设置多个画布

1.2.5  画布语法

1.3  设置函数图形

1.3.1 常规的函数设定方式

1.3.2 用x,y 分别是离散的散点数组,plt.plot() 也可以根据散点画图

1.4 绘图  plt.plot()

1.4.1 plt.plot()的语法

1.5 显示图像 plt.show()

1.5.1 关于 plt.show() 到底是否需要,用jupyter来写py实测并不需要plt.show()

1.6 用plt.plot 画出一个函数图形,测试代码

2 画布和图形的层级

3 画布的各种设定

3.1 关于颜色的设定

3.1.1 颜色的写法

3.1.2 修改颜色代码例子

3.2 设置画布的图形标题

​编辑

3.3 图片的图例

3.3.1 用plt.legend() 可设置多个曲线的图例,且默认展示在一起。

3.3.2 plt.plot(lable="")也可以设置单个plot 曲线的label,和图例效果差不多

3.3.3 如何设置图例 plt.legend()

3.3.4 可用的 plt.legend(loc="") 属性

3.3.5 测试图例 plt.legend()代码 

3.4 是否显示网格

 4  关于坐标轴的各种设置

4.1 坐标轴的描述

4.2 坐标轴范围设置

4.3 坐标轴的刻度设置

4.3.1 设置坐标轴刻度:用数组,或者其他类linspace()都可以

4.3.2 清除刻度

4.3.3 把数字刻度--标记为文本标签 label的显示形式

4.3.4 如果在label="" 包含中文时出现乱码,在block开头加如下代码即可

4.4 显示文本注释: plt.text()

4.4.1 语法

4.4.2 测试代码

4.5 显示箭头+文本注释: plt.annotate()

4.5.1 语法

4.5.2 测试代码

4.6 图形间填充

4.6.1 语法

4.6.2 测试代码

5 边界spines 和 移动坐标轴

5.1 先获取坐标轴

5.2 图片的4边,都是spine

5.3 比如隐藏右边、上边的spine

5.4 移动两个spine到0,0 点,达到把坐标轴移动的目的

5.5 移动坐标轴的代码(可看出坐标pos(0,0)处有了我们熟悉的数学坐标轴!)

5.5.1 移动效果看下面的图

5.5.2 移动坐标轴前后对比的测试代码

5.6 一个警告,不是报错

5.6.1 警告出现的可能原因1

5.6.2 警告出现的可能原因2

6 保存图片 plt.savefig()

6.1 详细语法

6.2 测试保存代码


0 matplotlib 官方文档查询最直接/权威

0.1 官方文档

MatplotlibMatplotlib中文网、Matplotlib官方中文文档。icon-default.png?t=N7T8https://www.matplotlib.org.cn/

教程 | MatplotlibMatplotlib中文网、Matplotlib官方中文文档。icon-default.png?t=N7T8https://www.matplotlib.org.cn/tutorials/#%E5%BA%8F%E8%A8%80

matplotlib.pyplot.axes — Matplotlib 3.8.2 documentationicon-default.png?t=N7T8https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.axes.html

0.2 plt 画图的特别备注:避免乱码负号等问题

0.2.1 注意乱码问题解决

  • 如果无法正常显示中文及负号,加上对应的的处理代码
  • 如何还是中文乱码,可能没有'SimHei',而需要用其他字体,比如我的电脑环境里就需要用 "LiSu"
  • 一般加在一段代码block的最前面
  • plt.rcParams['font.family']='LiSu'# 正常显示中文
  • plt.rcParams['axes.unicode_minus']=False# 正常显示负号

0.2.2 注意python的代码大小写

  • python是严格区分大小写的
  • "LiSu" 不要写"lisu"

1 matplotlib的基本用法 (画图流程)

1.1 需要用到的模块,需要实现安装,且导入

1.1.1 导入 import matplotlib.pyplot

import numpy as np
import matplotlib.pyplot as plt 

  • 注意,虽然常用的画图模块是 matplotlib
  • 但是实际上大家常用的 plt 是指 matplotlib.pyplot 这个子模块
  • 错误写法 import matplotlib as plt 会造成报错 TypeError: 'module' object is not callable

1.1.2 matplotlib 词源

matplotlib 推测词源

  • mat:matrix  矩阵,向量组,2维数组等,甚至于 张量tensor
  • plot:绘制
  • lib: library 库

1.2 figure  画图容器/ 画布

1.2.1 figure的官方解释

figure是一顶级的容器,包含了绘图所有的元素。我把这个理解为画布

  • 1.the Figure, which contains all the plot elements.
  • 2.The top level container for all the plot elements.

1.2.2 必须先获取至少1个figure:

  • 需要画图形和现实图形,首先必须需要获取figure才可以
  • fig=plt.figure()
  • 获取figure的方式是:fig = plt.figure()。

1.2.3 多个figure存在时,figure的生效范围

  • 同一段代码可能会存在多个 figure
  • 一个figure到下一个figure语句前之间的区域,属于该figure的作图管辖范围;
  • 而如果没有下一个figure时,则到plt.show()之间的区域,属于该figure的作图管辖范围。
  • 在一个figure的作图管辖范围的图像都会展示在同一个figure绘画弹框中。

1.2.4 因为可以一段代码里存在多个plt.figure(),因此可以设置多个画布

  • 如果需要图像在多个不同的figure弹框中展示,则需要获取多个figure才可以
  • 获取figure的方式是:fig = plt.figure()
  • 设置多个画布的时候以创建 plt.figure() 为分界

1.2.5  画布语法

画布语法:figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)

  • num:图像编号或名称,数字为编号 ,字符串为名称,编号,实测可省略 ,
  1. 但是图上看不到num,如果是plt.subplot() 可以看到figure的编号
  • figsize:指定figure的宽和高,单位为英寸;画布大小,实测可省略,有默认值
  • dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80。1英寸等于2.5cm,A4纸是 21*30cm的纸张 
  • facecolor:背景颜色
  • edgecolor:边框颜色 (看不出来)
  • frameon:是否显示边框 (如果不显示边框,则  facecolor的颜色也没有效果)

import numpy as np
import matplotlib.pyplot as pltfig1=plt.figure("名字",figsize=None,dpi=None,facecolor="gray", edgecolor="white", frameon=True)x=np.linspace(-5,5, 10)
y=x*2+1
y2=x**2# 绘图
plt.plot(x, y)
plt.plot(x, y2)# 显示图像
plt.show()

  • fig1=plt.figure("名字",figsize=None,dpi=None,facecolor="gray", edgecolor="white", frameon=Fales)
  • 如果设置 frameon=Fales,则facecolor的颜色也没有效果

1.3  设置函数图形

1.3.1 常规的函数设定方式

设置函数的关键:

函数就是形如 y=f(x)的样式,但是函数的作图需要具体的数据。

  • 1 自变量:需要一组自变量的数,方便作图。如果只是纯粹的函数形式当然抽象的X就够了。
  • 2 因变量:y=f(x)  函数的表达式即可,因为因变量可计算出来
  1. 自变量:x=np.linspace(-5,5, 10)
  2. 因变量:y=x*2+1

1.3.2 用x,y 分别是离散的散点数组,plt.plot() 也可以根据散点画图

  • 用x,y 分别是离散的散点数组,也可以生成函数图形
  • plt.plot() 也可以根据散点画图

比如 这样也可以生成函数,和函数图形

  • x=[1,2,3,4,5]
  • y=[2,4,6,8,10]
  • plt.plot(x,y)

下面是测试的代码 

import numpy as np
import matplotlib.pyplot as pltx=[1,2,3,4,5]
y=[2,4,6,8,10]plt.figure
plt.plot(x,y,c="#000000")plt.show

1.4 绘图  plt.plot()

1.4.1 plt.plot()的语法

  • plt.plot(x, y)
  • plt.plot(x对应自变量:一般对应X轴, y对应因变量:一般对应y轴)
  • plt.plot(x, y, linestyle, linewidth,color,marker, markersize, markeredgecolor, markerfactcolor, label, alpha)
  1. x:指定折线图的x轴数据;
  2. y:指定折线图的y轴数据;
  3. linestyle:指定折线的类型,可以是实线、虚线、点虚线、点点线等,默认实线;
  4. linewidth:指定折线的宽度
  5. marker:可以为折线图添加点,该参数是设置点的形状;
  6. markersize:设置点的大小;
  7. markeredgecolor:设置点的边框色:颜色 "b" , "blue" ,或RGB方式"#ff0000"
  8. markerfacecolor:设置点的填充色:颜色 "b" , "blue" ,或RGB方式"#ff0000"
  9. label:"字符串" ,为折线图添加标签,类似于图例的作用;

1.5 显示图像 plt.show()

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

1.5.1 关于 plt.show() 到底是否需要,用jupyter来写py实测并不需要plt.show()

  • 据说,matplotlib作图,要显示图像,必须调用plt.show(), 否则不显示
  • 还有种说法是,加入如下代码后,不需要plt.show()也能正常显示

%matplotlib notebook
%matplotlib inline

  • 但是实测没有 plt.show() 也能正常显示图形图像

import numpy as np
import matplotlib.pyplot as pltplt.figure(figsize=(3,3))
plt.plot([2,4,6,8,10])
plt.show()

import numpy as np
import matplotlib.pyplot as pltplt.figure(figsize=(3,3))
plt.plot([2,4,6,8,10])

import numpy as np
import matplotlib.pyplot as plt%matplotlib notebook
%matplotlib inlineplt.figure(figsize=(3,3))
plt.plot([2,4,6,8,10])

1.6 用plt.plot 画出一个函数图形,测试代码

  • 下面是上面内容的综合使用
import numpy as np
import matplotlib.pyplot as pltplt.plot(x,np.cos(x),color = 'r',            # 线条颜色linewidth = 2,          # 线条宽度 linestyle='-.',          # 线的类型:虚线:'--',点线:'-.',短虚线':',实线:'-'marker='*',             # 线上点的形状markersize = 5,        # 点的大小markeredgecolor = 'b',  # 点的边框颜色markerfacecolor ='green',   # 点的背景颜色,可能因为点太小没显示出来?label = 'cos',          # 图例alpha = 1 )             # 透明度:0-1之间 ,默认1plt.legend(fontsize = 15)        # 显示图例
plt.show()

2 画布和图形的层级

  • 第1层: figure  画布
  • 第2层: axes 子图
  • 第3层: axis 坐标轴

1、axes:axes包含定义单元集的Axis对象。

2、axis:axis是指定图表中所有baiAxes对象的组成部分。

matplotlib.pyplot.axis(*v, **kwargs)

获得或设定axis内容的便利方法。

常用参数:
 

xmin, ymin, xmax, ymax : float, optional

The axis limits to be set. Either none or all of the limits must be given.

option : str

Possible values:

Value    Description
‘on’    Turn on axis lines and labels.
‘off’    Turn off axis lines and labels.
‘equal’    Set equal scaling (i.e., make circles circular) by changing axis limits.
‘scaled’    Set equal scaling (i.e., make circles circular) by changing dimensions of the plot box.
‘tight’    Set limits just large enough to show all data.
‘auto’    Automatic scaling (fill plot box with data).
‘normal’    Same as ‘auto’; deprecated.
‘image’    ‘scaled’ with axis limits equal to data limits.
‘square’    Square plot; similar to ‘scaled’, but initially forcing xmax-xmin = ymax-ymin.

emit : bool, optional, default True

Whether observers are notified of the axis limit change. This option is passed on to set_xlim andset_ylim.
 

matplotlib.pyplot.axes(arg=None, **kwargs)

在当前figure新增一个axes对象,并设为当前活动。

axes不是数学上的座标轴,而是图形结构中的一个对象。所有绘图函数都是直接作用在当前axes对象上。

常用参数:

arg : { None, 4-tuple, Axes }

The exact behavior of this function depends on the type:

None: A new full window axes is added using subplot(111, **kwargs)

4-tuple of floats rect = [left, bottom, width, height]. A new axes is added with dimensions rect in normalized (0, 1) units using add_axes on the current figure.

Axes: This is equivalent to pyplot.sca. It sets the current axes to arg. Note: This implicitly changes the current figure to the parent of arg.

Note

projection : {None, ‘aitoff’, ‘hammer’, ‘lambert’, ‘mollweide’, ‘polar’, ‘rectilinear’, str}, optional

The projection type of the Axes. str is the name of a costum projection, see projections. The default None results in a ‘rectilinear’ projection.

polar : boolean, optional

If True, equivalent to projection=‘polar’.

sharex, sharey : Axes, optional

Share the x or y axis with sharex and/or sharey. The axis will have the same limits, ticks, and scale as the axis of the shared axes.

label : str

A label for the returned axes.
 

3 画布的各种设定

3.1 关于颜色的设定

3.1.1 颜色的写法

  • 可以使用 "b" 等颜色字符串缩写,比如"b" 代表 "blue"

  • 也可以直接使用 RGB颜色代码 如  "#000000"

3.1.2 修改颜色代码例子

import numpy as np
import matplotlib.pyplot as pltx=np.linspace(-10,10,100)plt.figure
plt.plot(x,np.sin(x),c="b")plt.show

  • 下面改用rgb颜色代码
import numpy as np
import matplotlib.pyplot as pltx=np.linspace(-10,10,100)plt.figure
plt.plot(x,np.sin(x),c="#000000")plt.show

3.2 设置画布的图形标题

  • plt.title("here is title")
  • 一般在 figure的 正中间的正上方

3.3 图片的图例

3.3.1 用plt.legend() 可设置多个曲线的图例,且默认展示在一起。

  • # 显示图例
  • plt.legend()
  • plt.legend(labels=[xx_label, x_label])

3.3.2 plt.plot(lable="")也可以设置单个plot 曲线的label,和图例效果差不多

  • plt.plot(x, y, linestyle, linewidth,color,marker, markersize, markeredgecolor, markerfactcolor, label, alpha)
  • 见下图
  • 但是,必须配合 plt.legend() 图例名字才会显示,否则不显示。

3.3.3 如何设置图例 plt.legend()

显示要求

  • 图例无论是plt.plot(label="")设置,还是直接用 plt.legend() 设置
  • 都必须配合 plt.legend() 图例名字才会显示,否则不显示。

可以通过设置 loc=""属性,设置图例显示的位置,默认在左上角 upper left

3.3.4 可用的 plt.legend(loc="") 属性

 可设置legend的位置

    best
    upper right
    upper left
    lower left
    lower right
    right
    center left
    center right
    lower center
    upper center
    center

3.3.5 测试图例 plt.legend()代码 

import numpy as np
import matplotlib.pyplot as pltx=[1,2,3,4,5]
y=[2,4,6,8,10]
y2=[z**2 for z in x]plt.figure
plt.plot(x,y,c="#000000",label="2x")
plt.plot(x,y2,label="x^2")plt.legend()  # 如果不加这句 plt.legend() ,plot(label="")不会显示,默认在左上角
plt.legend(loc="lower right")plt.show

3.4 是否显示网格

  • plt.grid(True)     # 显示网格
  • plt.grid(False)    # 隐藏网格


 

 4  关于坐标轴的各种设置

  • 坐标轴描述
  • 坐标轴范围设置
  • 坐标轴刻度
  • 挪动坐标轴

4.1 坐标轴的描述

  • plt.xlabel("X axis")
  • plt.ylabel("Y axis")

4.2 坐标轴范围设置

  • plt.xlim((-10,10))
  • plt.ylim((-10,10))

4.3 坐标轴的刻度设置

4.3.1 设置坐标轴刻度:用数组,或者其他类linspace()都可以

  • # 设置坐标轴刻度
  • plt.xticks([-4, -2, 0, 2, 4])
  • plt.yticks(np.linspace(-10, 10, 10))

4.3.2 清除刻度

  • # 这样可以清除刻度
  • plt.xticks()
  • plt.yticks()

import numpy as np
import matplotlib.pyplot as pltfig1=plt.figure(num=1)x=np.linspace(-5,5, 10)
y=x*2+1
y2=x**2# 设置坐标轴描述
plt.xlabel("X axis")
plt.ylabel("Y axis")# 设置坐标轴范围
plt.xlim((-10,10))
plt.ylim((-10,10))# 设置坐标轴刻度
plt.xticks([-4, -2, 0, 2, 4])
plt.yticks(np.linspace(-10, 10, 10))
# 这样可以清除刻度 plt.xticks()
# 这样可以清除刻度 plt.yticks()# 绘图
plt.plot(x, y)
plt.plot(x, y2)# 显示图像
plt.show()

4.3.3 把数字刻度--标记为文本标签 label的显示形式

plt.yticks([-1,-0.5,0,0.5,1],labels="ABCDE") 

  • labels="" 可以用来设置对应的中文标签
  • 记住,需要和刻度值一一对应
  • 可以不加label="" 关键字
  1. plt.xticks([-10,-5,0,5,10],['巴黎','北京','纽约','伦敦','悉尼'])
  2. plt.xticks([-10,-5,0,5,10],labels=['巴黎','北京','纽约','伦敦','悉尼'])
  • 对应方法
  • 按字符串一个一个对应
  • plt.yticks([-1,-0.5,0,0.5,1],labels="ABCDE")
  • 按数组内的元素个数一一对应,更灵活
  • plt.xticks([-10,-5,0,5,10],labels=['巴黎','北京','纽约','伦敦','悉尼'])

import numpy as np
import matplotlib.pyplot as pltplt.rcParams['font.family']='LiSu'# 正常显示中文
plt.rcParams['axes.unicode_minus']=False# 正常显示负号x=np.linspace(-10,10,100)plt.figure
plt.plot(x,np.sin(x),c="#000000")plt.xticks([-10,-5,0,5,10],['巴黎','北京','纽约','伦敦','悉尼'])
# 这样也可以 plt.xticks([-10,-5,0,5,10],labels=['巴黎','北京','纽约','伦敦','悉尼'])
plt.yticks([-1,-0.5,0,0.5,1],labels="ABCDE")plt.show

4.3.4 如果在label="" 包含中文时出现乱码,在block开头加如下代码即可

plt.rcParams['font.family']='LiSu'# 正常显示中文
plt.rcParams['axes.unicode_minus']=False# 正常显示负号

4.4 显示文本注释: plt.text()

4.4.1 语法

plt.text(x =pos,y = pos, s = '这是标注', fontsize = 15,c = 'b',rotation = 20)

  • x表示x轴坐标值
  • y表示y轴坐标值 
  • fontsize = 15
  • c = 'b'
  • rotation控制文本字体角度

4.4.2 测试代码

import numpy as np
import matplotlib.pyplot as pltx=[1,2,3,4,5]
y=[2,4,6,8,10]
y2=[z**2 for z in x]plt.figure
plt.plot(x,y,c="#000000",label="2x")
plt.plot(x,y2,label="x^2")plt.legend()  # 如果不加这句 plt.legend() ,plot(label="")不会显示,默认在左上角
plt.legend(loc="lower right")plt.text(x=3,y=6,s="这是2y",fontsize = 20,c = 'b',rotation = 15)
plt.text(x=3,y=10,s="这是y^2",fontsize = 20,c = 'r',rotation = 50)#plt.savefig(r"C:\Users\Administrator\Desktop\测试函数图片101.jpg")plt.show

4.5 显示箭头+文本注释: plt.annotate()

4.5.1 语法

plt.annotate(text,xy,xytext,arrowprops)

  • text表示注释文本
  • xy表示箭头端点位置,也是箭头的指向终点
  • xytext表示文本注释的位置,也是箭头的指向起点
  • arrowprops控制箭头,形式为字典

4.5.2 测试代码

import numpy as np
import matplotlib.pyplot as pltx=[1,2,3,4,5]
y=[2,4,6,8,10]
y2=[z**2 for z in x]plt.figure
plt.plot(x,y,c="#000000",label="2x")
plt.plot(x,y2,label="x^2")plt.legend()  # 如果不加这句 plt.legend() ,plot(label="")不会显示,默认在左上角
plt.legend(loc="lower right")plt.text(x=3,y=6,s="这是2y",fontsize = 20,c = 'b',rotation = 15)
plt.text(x=3,y=10,s="这是y^2",fontsize = 20,c = 'r',rotation = 50)plt.annotate(text = '相交点',xy = (2,4),xytext = (2,10),arrowprops = {'headwidth':10,'facecolor':'r'},fontsize = 15)#plt.savefig(r"C:\Users\Administrator\Desktop\测试函数图片101.jpg")plt.show

4.6 图形间填充

4.6.1 语法

  • plt.fill_between(x,y,y2,facecolor = 'k',alpha = 0.2)
  • 第一个参数表示要覆盖的左右范围
  • 第二个参数表示覆盖的下限
  • 第三个参数表示覆盖的上限,
  • 在这里则表示填充y曲线和y2曲线中间的区域

4.6.2 测试代码

import numpy as np
import matplotlib.pyplot as pltx=[1,2,3,4,5]
y=[2,4,6,8,10]
y2=[z**2 for z in x]plt.figure
plt.plot(x,y,c="#000000",label="2x")
plt.plot(x,y2,label="x^2")plt.legend()  # 如果不加这句 plt.legend() ,plot(label="")不会显示,默认在左上角
plt.legend(loc="lower right")plt.text(x=3,y=6,s="这是2y",fontsize = 20,c = 'b',rotation = 15)
plt.text(x=3,y=10,s="这是y^2",fontsize = 20,c = 'r',rotation = 50)plt.annotate(text = '相交点',xy = (2,4),xytext = (2,10),arrowprops = {'headwidth':10,'facecolor':'r'},fontsize = 15)
plt.fill_between(x,y,y2,facecolor = 'k',alpha = 0.2)#plt.savefig(r"C:\Users\Administrator\Desktop\测试函数图片101.jpg")plt.show

5 边界spines 和 移动坐标轴

5.1 先获取坐标轴

  • # 获取坐标轴,gca就是get current axes的意思
  • ax = plt.gca()

5.2 图片的4边,都是spine

  • 图片的4边,都是spine
  • 可以通过plt.gca().spines 分别操作这4个spine
  1. ax.spines["top"]
  2. ax.spines["bottom"]
  3. ax.spines["right"] 
  4. ax.spines["left"]

5.3 比如隐藏右边、上边的spine

  • # 隐藏右边、上边的spine
  • ax.spines["right"].set_color("none")
  • ax.spines["top"].set_color("none")

5.4 移动两个spine到0,0 点,达到把坐标轴移动的目的

  • # 移动两个spine到0,0,达到把坐标轴移动的目的
  • ax.spines["bottom"].set_position(("data", 0))
  • ax.spines["left"].set_position(("data", 0))

5.5 移动坐标轴的代码(可看出坐标pos(0,0)处有了我们熟悉的数学坐标轴!

  • spine 不是坐标轴,所以看起来像在第一象限!但实际上往往不是!!
  • 所以要建立我们熟悉的 数学坐标轴!在postion(0,0)处

5.5.1 移动效果看下面的图

  • 一般默认显示在第一象限
  • (实际坐标轴可能是其他象限,但是因为 spine 不是坐标轴,所以看起来像在第一象限!) 
  • 图形移动到坐标轴的中间了

5.5.2 移动坐标轴前后对比的测试代码

import numpy as np
import matplotlib.pyplot as plt#原始的
figure = plt.figure(num=99)
# x,y
x = np.linspace(-4, 4, 50)
y = x ** 2 - 4
xx_label = r"y = x ^ 2 - 4"
x_label = r"y = x"
plt.title("here is title")# 绘图
plt.plot(x, y, color="#ff0000",label="xxx")
# 显示图例
plt.legend()
plt.plot(x, x)
# 显示网格
plt.grid(True)
# 显示图例
plt.legend(labels=[xx_label, x_label])# 移动坐标轴的第2个图
figure = plt.figure(num=100)# x,y
x = np.linspace(-4, 4, 50)
y = x ** 2 - 4# 获取到坐标轴
ax = plt.gca()# 隐藏右边、上边的spine
ax.spines["right"].set_color("none")
ax.spines["top"].set_color("none")# 移动两个spine到0,0,达到把坐标轴移动的目的
ax.spines["bottom"].set_position(("data", 0))
ax.spines["left"].set_position(("data", 0))xx_label = r"y = x ^ 2 - 4"
x_label = r"y = x"
plt.title("here is title")# 绘图
plt.plot(x, y, color="#ff0000",label="xxx")# 显示图例
plt.legend()plt.plot(x, x)# 显示网格
plt.grid(True)# 显示图例
plt.legend(labels=[xx_label, x_label])plt.show()

  • 图片上有容易让人误导的地方
  • 比如y=x 并不是45°直线,是因为格子grid不是正方形,是长方形压扁的缘故,请注意

5.6 一个警告,不是报错

 运行代码时可能会出现如下警告:No artists with labels found to put in legend. Note that artists whose label

5.6.1 警告出现的可能原因1

#plt.plot() 相关代码中缺乏label名称的说明

  • plt.plot(x, y, color="#ff0000")
  • plt.plot(x, y, color="#ff0000",label="xxx")   #没有这个就会警告 label="xxx"

5.6.2 警告出现的可能原因2

#legend相关代码中缺乏label名称的说明,需要给予图例对应的名字

  • # 显示图例
  • plt.legend()
  • plt.legend(labels=[xx_label, x_label]) # 调整后不报错并显示图例

6 保存图片 plt.savefig()

6.1 详细语法

plt.savefig(fname, dpi=None, facecolor='w', edgecolor='w')

  • fname  #文件名 或者保存位置
  • dpi
  • facecolor
  • edgecolor

6.2 测试保存代码

import numpy as np
import matplotlib.pyplot as pltx=[1,2,3,4,5]
y=[2,4,6,8,10]
y2=[z**2 for z in x]plt.figure
plt.plot(x,y,c="#000000",label="2x")
plt.plot(x,y2,label="x^2")plt.legend()  # 如果不加这句 plt.legend() ,plot(label="")不会显示,默认在左上角
plt.legend(loc="lower right")plt.savefig(r"C:\Users\Administrator\Desktop\测试函数图片101.jpg")plt.show

这篇关于【python 的各种模块】(5) 在python使用matplotlib库来画图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/543687

相关文章

详解Vue如何使用xlsx库导出Excel文件

《详解Vue如何使用xlsx库导出Excel文件》第三方库xlsx提供了强大的功能来处理Excel文件,它可以简化导出Excel文件这个过程,本文将为大家详细介绍一下它的具体使用,需要的小伙伴可以了解... 目录1. 安装依赖2. 创建vue组件3. 解释代码在Vue.js项目中导出Excel文件,使用第三

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

关于@MapperScan和@ComponentScan的使用问题

《关于@MapperScan和@ComponentScan的使用问题》文章介绍了在使用`@MapperScan`和`@ComponentScan`时可能会遇到的包扫描冲突问题,并提供了解决方法,同时,... 目录@MapperScan和@ComponentScan的使用问题报错如下原因解决办法课外拓展总结@