IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 学matplotlib基础,十分钟带你掌握matplotlib基本用法 -> 正文阅读

[Python知识库]学matplotlib基础,十分钟带你掌握matplotlib基本用法

初识matplotlib

matplotlib官网

  • 本章节是matplotlib的基础用法,掌握画图的流程,对辅助显示层和图像层上的操作。

- 本章知识点归纳如下:

  • 导入模块: import matplotlib.pyplot as plt/import numpy as np
  • 定义图像窗口:plt.figure()
  • 画图:plt.plot(x,y)
  • 定义坐标轴范围:plt.xlim()/plt.ylim()
  • 定义坐标轴名称:plt.xlabel()/plt.ylabel()
  • 定义坐标轴刻度及名称:plt.xticks()/plt.yticks()
  • 设置图像边框颜色:ax = plt.gca() / ax.spines[].set_color()
  • 调整刻度位置:ax.xaxis.set_ticks_position()/ax.yaxis.set_ticks_position()
  • 调整边框(坐标轴)位置:ax.spines[].set_position()
  • 添加图例:plt.legend()
  • 画点:plt.scatter()
  • 添加标注:plt.annotate()
  • 添加注释:plt.text()
  • 添加标题:plt.title()
  • 设置格式:
    • 设置中文字体:plt.rcParams[‘font.family’]=‘Microsoft YaHei’
    • 设置正常显示字符:plt.rcParams[‘axes.unicode_minus’] = False
  • 一个图像层多个绘图区:plt.subplots()

导入相关包

import matplotlib.pyplot as plt
#from matplotlib import pyplot as plt
import numpy as np
import random
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False
%matplotlib inline

1、创建两组数据

使用np.linspace定义x:范围是(-3,3),个数是50,将产生一组(-3,3)内均匀分布的50个数;(x,y1)表示曲线1,(x,y2)表示曲线2。

x = np.linspace(-3, 3, 50)
y1 = 2*x + 1
y2 = x**2

2、定义图像窗口并画图

  • 在画图前使用plt.figure()定义一个图像窗口:编号为3;大小为(8, 5);这两项参数可缺省。其中,num参数决定了程序运行后弹出的图像窗口名字,但在klab平台下不会显示。
  • 接着,我们使用plt.plot画出(x ,y2)曲线;使用plt.plot画(x ,y1)曲线;
    • 曲线的颜色属性(color)为红色;
    • 曲线的宽度(linewidth)为1.0;
      曲线的类型(linestyle)为虚线,除了虚线外,大家还可使用以下线性:’-’、’–’、’-.’、’:’ 。
  • 接着,我们使用plt.show()显示图像。
plt.figure(num=3, figsize=(8, 5))
plt.plot(x, y1)
plt.plot(x, y2, color='red', linewidth=1.0, linestyle='--')

plt.show()

#方法二:
#fig,ax = plt.subplots()  #创建画布
#ax.plot(x,y1,color='red', linewidth=1.0, linestyle='--')
#ax.plot(x,y2)
#plt.show()

?
在这里插入图片描述

?

  • 如果希望图例能够更加个性化,可通过以下方式更改:参数 loc 决定了图例的位置,比如参数 loc=‘upper right’ 表示图例将添加在图中的右上角。
  • 其中’loc’参数有多种,’best’表示自动分配最佳位置,其余的如下:
    • ‘best’ : 0,
    • ‘upper right’ : 1,
    • ‘upper left’ : 2,
    • ‘lower left’ : 3,
    • ‘lower right’ : 4,
    • ‘right’ : 5,
    • ‘center left’ : 6,
    • ‘center right’ : 7,
    • ‘lower center’ : 8,
    • ‘upper center’ : 9,
    • ‘center’ : 10

3、为题2两条线添加图例,图例位置在右上角

  • 设置两条线的类型等信息(蓝色实线与红色虚线),并且通过label参数为两条线设置名称。
    • 比如直线的名称就叫做 “linear line”, 曲线的名称叫做 “square line”。
    • 只是设置好名称并不能使我们的图例出现,要通过plt.legend()设置图例的显示。legend获取代码中的 label 的信息, plt就能自动的为我们添加图例。
  • 或者设置 handles 参数来选择图例中显示的内容。
    • 在上面的代码 plt.plot(x, y2, label=‘linear line’) 和 plt.plot(x, y1, label=‘square line’) 中用变量l1和l2分别存储起来,而且需要注意的是 l1, l2,要以逗号结尾, 因为plt.plot() 返回的是一个列表。然后将 l1,l2 这样的objects以列表的形式传递给 handles。
    • label 参数可以用来单独修改之前的 label 信息, 给不同类型的线条设置图例信息。
# set line syles
plt.plot(x, y1, label='linear line')
plt.plot(x, y2, color='red', linewidth=1.0, linestyle='--', label='square line')
plt.legend(loc='upper right')

#方法二
#l1, = plt.plot(x, y1,)     
#l2, = plt.plot(x, y2, color='red', linewidth=1.0, linestyle='--')
#plt.legend(handles = [l1,l2,],labels=['up','down'], loc='upper right')

在这里插入图片描述

?

4、将题2定义x轴名称为X,范围为(-1,2),y轴名称为Y,范围为(-2,3)。

  • 使用plt.xlim设置x坐标轴范围:(-1, 2);
  • 使用plt.ylim设置y坐标轴范围:(-2, 3);
  • 使用plt.xlabel设置x坐标轴名称:'x’;
  • 使用plt.ylabel设置y坐标轴名称:'y’;
plt.figure(num=3, figsize=(8, 5),)
plt.plot(x, y1, label='linear line')
plt.plot(x, y2, color='red', linewidth=1.0, linestyle='--', label='square line')
plt.legend(loc=1)
plt.xlim((-1, 2))
plt.ylim((-2, 3))
plt.xlabel('X')
plt.ylabel('Y')
plt.grid()
plt.show()

? 在这里插入图片描述

?

5、将上题的图设置x轴刻度:范围是(-1,2);个数是5,设置y轴刻度以及名称:刻度为[-2, -1.8, -1, 1.22, 3];对应名称为[‘really bad’,’bad’,’normal’,’good’, ‘really good’]。

  • 有时候,我们的坐标轴刻度可能并不是一连串的数字,而是一些文字,或者我们想要调整坐标轴的刻度的稀疏,这时,就需要使用plt.xticks()或者plt.yticks()来进行调整:
    • 首先,使用np.linspace定义新刻度范围以及个数:范围是(-1,2);个数是5。
    • 使用plt.xticks设置x轴刻度:范围是(-1,2);个数是5。
    • 使用plt.yticks设置y轴刻度以及名称:刻度为[-2, -1.8, -1, 1.22, 3];
    • 对应刻度的名称为[‘really bad’,’bad’,’normal’,’good’, ‘really good’]。
  • 使用plt.show()显示图像。
plt.figure(num=3, figsize=(8, 5),)
plt.plot(x, y1, label='linear line')
plt.plot(x, y2, color='red', linewidth=1.0, linestyle='--', label='square line')
plt.legend(loc='upper right')
plt.xlim((-1, 2))
plt.ylim((-2, 3))
plt.xlabel('X')
plt.ylabel('Y')

new_ticks = np.linspace(-1, 2, 5)
print(new_ticks)
plt.xticks(new_ticks)
plt.yticks([-2, -1.8, -1, 1.22, 3], [r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$really\ good$'])
plt.show()

在这里插入图片描述

6、获取坐标轴信息,设置图像边框颜色,取消上边框和右边框

  • 上图中坐标轴总是由上下左右四条线组成,我们也可以对它们进行修改:
    • 使用plt.gca()获取当前坐标轴信息。
    • 使用.spines设置边框:右侧边框;
    • 使用.set_color设置边框颜色:默认白色;
    • 使用.spines设置边框:上边框;
    • 使用.set_color设置边框颜色:默认白色;
plt.figure(num=3, figsize=(8, 5),)
plt.plot(x, y1, label='linear line')
plt.plot(x, y2, color='red', linewidth=1.0, linestyle='--', label='square line')

ax = plt.gca() 
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
plt.show()

在这里插入图片描述

?

7、将上题中的xy轴移到0点位置

  • 使用.xaxis.set_ticks_position设置x坐标刻度数字或名称的位置:bottom.(所有位置:top,bottom,both,default,none);
  • 使用.spines设置边框:x轴;
  • 使用.set_position设置边框位置:y=0的位置;(位置所有属性:outward,axes,data)
  • 使用.yaxis.set_ticks_position设置y坐标刻度数字或名称的位置:left.(所有位置:left,right,both,default,none)
  • 使用.spines设置边框:y轴;
  • 使用.set_position设置边框位置:x=0的位置;(位置所有属性:outward,axes,data)
  • 使用plt.show显示图像.
plt.figure(num=3, figsize=(8, 5))
plt.plot(x, y2)
plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')

ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
plt.show()

在这里插入图片描述

?

8、在坐标轴上画出y=2x+1的图,并用点标注出(1,3)的位置

  • 当图线中某些特殊地方需要标注时,我们可以使用 annotation. matplotlib 中的 annotation 有两种方法
    • 一种是用 plt 里面的 annotate
    • 一种是直接用 plt 里面的 text 来写标注
  • 标注出点(x0, y0)的位置信息
    • plt.plot([x0, x0,], [0, y0,], ‘k–’, linewidth=2.5) 画出一条垂直于x轴的虚线。其中,[x0, x0,], [0, y0,] 表示在图中画一条从点 (x0,y0) 到 (x0,0) 的直线,‘k–’ 表示直线的颜色为黑色(black),线形为虚线
    • plt.scatter 函数可以在图中画点,此时我们画的点为 (x0,y0), 点的大小(size)为 50, 点的颜色为蓝色(blue),可简写为 b。
#数据准备
x = np.linspace(-3, 3, 50)
y = 2*x + 1
#画图
plt.figure(num=1, figsize=(8, 5),)
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))

plt.plot(x, y,)

#标点
x0 = 1
y0 = 2*x0 + 1
plt.scatter([x0, ], [y0, ], s=50, color='b')
plt.show()

?
在这里插入图片描述

?

9、准备数据并画图——上海在11点到12点一小时内每分钟的温度(15度-18度)变化

# 数据准备
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x ]
# 创建画布
plt.figure(figsize=(20,8), dpi=80)
# 画图
plt.plot(x, y_shanghai)
plt.show()

在这里插入图片描述

?

10、为x刻度改为11点()分格式,

plt.figure(figsize=(20,8),dpi=80)
plt.rcParams['font.family']='Microsoft YaHei'#设置中文字体

x = range(60)
y_shanghai = [random.uniform(15,18) for i in x ]
x_label = ["11点{}分".format(i) for i in x]
plt.xticks(x[::5], x_label[::5])
plt.plot(x, y_shanghai)
plt.show()

在这里插入图片描述

11、添加文字标题和xy轴的文字描述

x = range(60)
y_shanghai = [random.uniform(15,18) for i in x ]
plt.figure(figsize=(20,8), dpi=80)
x_label = ["11点{}分".format(i) for i in x]
plt.xticks(x[::5], x_label[::5])

plt.xlabel("时间变化")
plt.ylabel("温度变化")
plt.title("某城市一小时内每分钟的温度变化")
plt.plot(x, y_shanghai)
plt.show()

?
在这里插入图片描述

?

12、再添加一个城市的温度变化,例北京当时的温度为10度到14度

#1、准备xy
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
y_beijing = [random.uniform(10,14) for i in x]

#2、创建画布
plt.figure(figsize=(20,8),dpi=80)
#3、图像层:绘制图像,参数有很多,可以改线条风格linestyle(默认实线)颜色color等
plt.plot(x,y_shanghai, color="r")
plt.plot(x,y_beijing,color="b")
plt.show()

?
在这里插入图片描述

13、显示图例

x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
y_beijing = [random.uniform(10,14) for i in x]
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y_shanghai, color="r",label="上海")
plt.plot(x,y_beijing,color="b",label="北京")
#显示图例,需要在图像层与辅助显示层都做修改best为默认值
plt.legend(loc="best")
plt.show()

?
在这里插入图片描述

?

14、修改xy轴的刻度,添加标题xy轴的描述

x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
y_beijing = [random.uniform(10,14) for i in x]
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y_shanghai, color="r",label="上海")
plt.plot(x,y_beijing,color="b",label="北京")
plt.legend(loc="best")
plt.rcParams['font.sans-serif']=['SimHei']
x_label = ["11点{}分".format(i) for i in x]
plt.xticks(x[::5],x_label[::5])
plt.yticks(range(0, 40, 5))
#添加描述信息
plt.xlabel("时间变化")
plt.ylabel("温度变化")
plt.title("上海,北京两地11点到12点每分钟的温度变化状况")
plt.show()

?
在这里插入图片描述

?

画出直线 y = x-1, 线型为虚线,线宽为1,纵坐标范围(-2,1),横坐标范围(-1,2),横纵坐标在(0,0)坐标点相交。横坐标的 [-1,-0.5,1] 分别对应 [bad, normal, good]。

plt.figure(figsize=(8,5))
x=np.linspace(-2,1,50)
y=x-1
plt.xlim(-1,2)
plt.ylim(-2,1)
plt.xticks([-1,-0.5,1],['bad','normal','good'])
plt.plot(x,y,linewidth=1, linestyle='--')
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))

在这里插入图片描述

?

假设大家在30岁的时候,根据自己的实际情况,统计出来了你和同桌从11岁到30岁每年交的朋友的数量如列表a和b,请绘制出该数据的折线图,以便分析自己和同桌每年交朋友的数量走势

  • a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
  • b = [1,0,3,1,2,2,2,3,1,1,1,1,1,2,1,1,2,3,2,2]
  • y轴表示个数
  • x轴表示岁数,比如11岁,12岁
x=np.linspace(11,30,20)
a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
b = [1,0,3,1,2,2,2,3,1,1,1,1,1,2,1,1,2,3,2,2]
plt.figure(figsize=(14,6),dpi=80)
plt.xticks(x)
l1=plt.plot(x,a,color='r',linestyle='-')
l2=plt.plot(x,b,color='b',linestyle='-')
plt.xlabel('yeares',)
plt.ylabel('make friend')
plt.title('11岁到30岁交友数量',)
Text(0.5, 1.0, '11岁到30岁交友数量')

在这里插入图片描述

?

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 11:23:48  更:2021-07-24 11:23:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/7 18:03:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码