【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

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]