python模块(5)-Matplotlib 简易使用教程

Matplotlib简易使用教程

  • 0.matplotlib的安装
  • 1.导入相关库
  • 2.画布初始化
    • 2.1 隐式创建
    • 2.2 显示创建
    • 2.3 设置画布大小
    • 2.4 plt.figure()常用参数
  • 3.plt. 能够绘制图像类型
    • 3.1等高线
    • 3.2 箭头arrow
  • 4.简单绘制小demo
    • demo1.曲线图
    • demo2-柱状、饼状、曲线子图
  • 5.plt.plot()--设置曲线颜色,粗细,线形,图例
  • 6.plt.xxx常用方法待更新
    • 6.1 plt.text() 图中添加文字
    • 6.2 plt.xlim() 设置坐标轴的范围
    • 6.3 plt.savefig()存图 参数详解
    • 6.4 xxx.title()设置标题
      • 6.4.1 极简设置
      • 6.4.2 plt.title()常用的参数
    • 6.5 plt.lengend()图例
    • 6.6 plt.xticks()改变坐标轴的刻度文字
  • 7. matplotlib.colorbar
  • 9.错误信息
    • 9.1 RuntimeError: Invalid DISPLAY variable
  • 10.Seaborn
  • 11.Bokeh

Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。其子库pyplot包含大量与MatLab相似的函数调用接口。

matplotlib绘图三个核心概念–figure(画布)、axes(坐标系)、axis(坐标轴)

画图首先需要初始化(创建)一张画布,然后再创建不同的坐标系,在各自的坐标系内绘制相应的图线

绘图步骤

导入相关库->初始化画布->准备绘图数据->将数据添加到坐标系中->显示图像

注:可以绘制list,也可以绘制Numpy数组

0.matplotlib的安装

Linux 终端安装

pip install matplotlib

1.导入相关库

import numpy as np
import matplotlib.pyplot as plt

2.画布初始化

2.1 隐式创建

第一次调用plT.xxx(诸如:plt.plot(x,y))时,系统自动创建一个figure对象,并在figure上创建一个axes坐标系,基于此进行绘图操作(隐式初始化只能绘制一张图)

x=[1,2,5,7]
y=[4,9,6,8]
plt.plot(x,y)
plt.show()

2.2 显示创建

手动创建一个figure对象,在画布中添加坐标系axes

figure = plt.figure()
axes1 = figure.add_subplot(2,1,1)
Axes2= figure.add_subplot(2,1,2)

2.3 设置画布大小

figure = plt.figure(figsize=(xinch,yinch))

2.4 plt.figure()常用参数

画布属性(数量,大小)通过画布初始化方法设置,在初始化的时候填写响应的参数。

plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class ‘matplotlib.figure.Figure’>, clear=False, **kwargs

0.num–a unique identifier for the figure (int or str)
1.figsize–画布大小(default: [6.4, 4.8] in inches.)
2.dpi=None–The resolution of the figure in dots-per-inch.
3.facecolor–The background color
4.edgecolor–The border color
5.frameon–If False, suppress drawing the figure frame.
6.FigureClass=<class ‘matplotlib.figure.Figure’>,
7.clear=False, If True and the figure already exists, then it is cleared.

3.plt. 能够绘制图像类型

0.曲线图:plt.plot()
1.散点图:plt.scatter()
2.柱状图:plt.bar()
3.等高线图:plt.contourf()
4.在等高线图中增加label:plt.clabel()
5.矩阵热图:plt.imshow()
6.在随机矩阵图中增加colorbar:plt.colorbar()
7.直方图
plt.hist( data,bin)
https://www.jianshu.com/p/f2f75754d4b3

隐式创建时,用plt.plot()在默认坐标系中添加数据,显示创建时,用axes1.plot()在对应的坐标系中添加绘制数据 .plot()用于绘制曲线图

3.1等高线

import matplotlib.pyplot as plt
n=256
x=np.linspace(-3,3,n)
y=np.linspace(-3,3,n)
X,Y=np.meshgrid(x,y) #把X,Y转换成网格数组,X.shape=nn,Y.shape=nn
plt.contourf(X,Y,height(X,Y),8,alpha=0.75,cmap=plt.cm.hot)
#8:8+2=10,将高分为10部分,
#alpha:透明度
#cmap:color map
#use plt.contour to add contour lines
C=plt.contour(X,Y,height(X,Y),8,colors=“black”,linewidth=.5)
#adding label
plt.clabel(C,inline=True,fontsize=10)
#clabel:cycle的label,inline=True表示label在line内,fontsize表示label的字体大小
plt.show()

参考博文:https://cloud.tencent.com/developer/article/1544887

3.2 箭头arrow

 arrow_x1 = x_list[0]arrow_x2 = x_list[10]arrow_y1 = y_list[0]arrow_y2 = y_list[10]self.axis1.arrow(arrow_x1, arrow_y1, arrow_x2-arrow_x1, arrow_y2-arrow_y1, width=0.1, length_includes_head=True, head_width=1,head_length=3, fc='b',ec='b')

参考文档:matplotlib 画箭头的两种方式

4.简单绘制小demo

demo1.曲线图

import numpy as np
import matplotlib.pyplot as plt
figure = plt.figure()
axes1 = figure.add_subplot(2,1,1)	# 2*1 的 第2个图
axes2= figure.add_subplot(2,1,2)  # 2*1 的 第2个图
# axes1 = figure.add_subplot(2,2,1) 2*2 的 第1个图
x,y=[1,3,5,7],[4,9,6,8]
a,b=[1,2,4,5],[8,4,6,2]
axes1.plot(x,y)
Axes2.plor(a,b)plot.show() # 显示图像
path = "xxx/xxx/xxx.png"
plt.savefig(path) #保存图像
plt.close() # 关闭画布

demo2-柱状、饼状、曲线子图

# 20210406
import matplotlib.pylab as plt
import numpy as np# 1.柱状图
plt.subplot(2,1,1)
n = 12
X = np.arange(n)
Y1 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)
Y2 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)plt.bar(X, +Y1, facecolor="#9999ff", edgecolor="white")
plt.bar(X, -Y2, facecolor="#ff9999", edgecolor="white")# 利用plt.text 指定文字出现的坐标和内容
for x, y in zip(X,Y1):plt.text(x+0.4, y+0.05, "%.2f" % y, ha="center", va="bottom")
# 限制坐标轴的范围
plt.ylim(-1.25, +1.25)# 2.饼状图
plt.subplot(2,2,3)
n = 20
Z = np.random.uniform(0, 1, n)
plt.pie(Z)# 3.第三部分
plt.subplot(2, 2, 4)
# 等差数列
X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
Y_C, Y_S = np.cos(X), np.sin(X)plt.plot(X, Y_C, color="blue", linewidth=2.5, linestyle="-")
plt.plot(X, Y_S, color="red", linewidth=2.5, linestyle="-")# plt.xlim-限定坐标轴的范围,plt.xticks-改变坐标轴上刻度的文字
plt.xlim(X.min() * 1.1, X.max() * 1.1)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],[r"$-\pi$", r"$-\pi/2$", r"$0$", r"$+\pi/2$", r"$\pi$"])
plt.ylim(Y_C.min()*1.1, Y_C.max()*1.1)
plt.yticks([-1, 0, 1],[r"$-1$", r"$0$", r"$+1$"])
#plt.show()
plt.savefig("test.png")

在这里插入图片描述

5.plt.plot()–设置曲线颜色,粗细,线形,图例

plt.plot(x,y,color=“deeppink”,linewidth=2,linestyle=’:’,label=‘Jay income’, marker=‘o’)

参数含义:
0–x,y :array 表示 x 轴与 y 轴对应的数据
1–color :string 表示折线的颜色; None
2–label :string 数据图例内容:label=‘实际数据’ None,配合plt.legend()使用
3–linestyle :string 表示折线的类型;
4–marker :string 表示折线上数据点处的类型; None
5–linewidth :数值 线条粗细:linewidth=1.=5.=0.3 1
6–alpha :0~1之间的小数 表示点的透明度; None

注:label:配合 plt.legend()使用,legend(…, fontsize=20),可以设置图例的字号大小
https://www.cnblogs.com/shuaishuaidefeizhu/p/11361220.html

6.plt.xxx常用方法待更新

grid 背景网格
tick 刻度
axis label 坐标轴名称
tick label 刻度名称
major tick label 主刻度标签
line 线style 线条样式
marker 点标记
font 字体相关
annotate标注文字:https://blog.csdn.net/helunqu2017/article/details/78659490/

6.1 plt.text() 图中添加文字

plt.text(x, y, s, fontdict=None, withdash=False, **kwargs)

可以用来给线上的sian打标签/标注

x y:scalars 放置text的位置,途中的横纵坐标位置
s:str 要写的内容text
fontdict: dictionary, optional, default: None 一个定义s格式的dict
withdash: boolean, optional, default: False。如果True则创建一个 TextWithDash实例。
color控制文字颜色

借助 transform=ax.transAxes,text 标注在子图相对位置

# 设置文本,目标位置 左上角,距离 Y 轴 0.01 倍距离,距离 X 轴 0.95倍距离
ax.text(0.01, 0.95, "test string", transform=ax.transAxes, fontdict={'size': '16', 'color': 'b'})

其他参数参考博文:https://blog.csdn.net/The_Time_Runner/article/details/89927708

6.2 plt.xlim() 设置坐标轴的范围

画布坐标轴设置

plt.xlim((-5, 5))
plt.ylim((0,80))

子图坐标轴配置

Axes.set_xlim((-5,5))
Axes.set_ylim((0,80))


问题1:横纵坐标等比例
plt.axis(“equal”)
Plt.axis(“scaled”) # 坐标值标的很小,曲线出描绘框架

6.3 plt.savefig()存图 参数详解

将绘制图像以png的形式存在当前文件夹下:

plt.savefig(“test.png”)

通过函数参数控制文件的存储格式,存储路径

savefig(fname, dpi=None, facecolor=’w’, edgecolor=’w’,
orientation=’portrait’, papertype=None, format=None,
transparent=False, bbox_inches=None, pad_inches=0.1,
frameon=None)

0–fname:A string containing a path to a filename, or a Python file-like object, or possibly some backend-dependent object such as PdfPages.(保存图片位置与路径的字符串)
1–dpi: None | scalar > 0 | ‘figure’
2–facecolor, edgecolor:(?)
3–orientation: ‘landscape’ | ‘portrait’
4–papertype:
5–format:(png, pdf, ps, eps and svg)
6–transparent:
7–frameon:
8–bbox_inches:
9–pad_inches:
10–bbox_extra_artists:

plt.show() 是以图片阻塞的方式显示图片,只有关掉显示窗口,代码才会继续运行。可以选择将图片保存下来(记得设置容易识别的文件名)查看,来保障程序运行的流畅性,

注:存完图关闭画布,防止内存占满

plt.close()

过多画布占内存报错

RuntimeWarning: More than 20 figures have been opened. Figures created through the pyplot interface (matplotlib.pyplot.figure) are retained until explicitly closed and may consume too much memory. (To control this warning, see the rcParam figure.max_open_warning).
max_open_warning, RuntimeWarning)

6.4 xxx.title()设置标题

6.4.1 极简设置

1.隐式初始化(画布)图像标题设置

plt.title(‘Interesting Graph’,fontsize=‘large’)

2.显式初始化(子图/坐标系)图像标题设置

ax.set_title(‘title test’,fontsize=12,color=‘r’)

3.设置画布标题

figure.suptitle(“xxxx”)

6.4.2 plt.title()常用的参数

0.fontsize–设置字体大小,默认12,可选参数 [‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’,‘x-large’, ‘xx-large’]
1.fontweight–设置字体粗细,可选参数 [‘light’, ‘normal’, ‘medium’, ‘semibold’, ‘bold’, ‘heavy’, ‘black’]
2.fontstyle–设置字体类型,可选参数[ ‘normal’ | ‘italic’ | ‘oblique’ ],italic斜体,oblique倾斜
3.verticalalignment–设置水平对齐方式 ,可选参数 : ‘center’ , ‘top’ , ‘bottom’ ,‘baseline’
4.horizontalalignment–设置垂直对齐方式,可选参数:left,right,center
5.rotation–(旋转角度)可选参数为:vertical,horizontal 也可以为数字
6.alpha–透明度,参数值0至1之间
7.backgroundcolor–标题背景颜色
8.bbox–给标题增加外框 ,常用参数如下:
9.boxstyle–方框外形
10.facecolor–(简写fc)背景颜色
11.edgecolor–(简写ec)边框线条颜色
12.edgewidth–边框线条大小

参考链接–https://blog.csdn.net/helunqu2017/article/details/78659490/

6.5 plt.lengend()图例

from matplotlib import pyplot as plt
import numpy as nptrain_x = np.linspace(-1, 1, 100)
train_y_1 = 2*train_x + np.random.rand(*train_x.shape)*0.3
train_y_2 = train_x**2+np.random.randn(*train_x.shape)*0.3
p1 = plt.scatter(train_x, train_y_1, c='red', marker='v' )
p2= plt.scatter(train_x, train_y_2, c='blue', marker='o' )
legend = plt.legend([p1, p2], ["CH", "US"], facecolor='blue')# 省略[p1, p2] 直接写图例
plt.show()

6.6 plt.xticks()改变坐标轴的刻度文字

plt.xticks([-np.pi, -np.pi/2, np.pi/2, np.pi],[r"$-\pi$", r"$-\pi/2$", r"$0$", r"$+\pi/2$", r"$\pi$"])

7. matplotlib.colorbar

plt.colorbar()
fig.colorbar(norm=norm, cmap=cmp ax=ax) # norm色卡数字范围,cmap 调制颜色

https://blog.csdn.net/sinat_32570141/article/details/105345725

9.错误信息

9.1 RuntimeError: Invalid DISPLAY variable

在远端服务器上运行时报错,本地运行并没有问题

原因:matplotlib的默认backend是TkAgg,而FltAgg、GTK、GTKCairo、TkAgg、Wx和WxAgg这几个backend都要求有GUI图形界面,所以在ssh操作的时候会报错。

解决:在导入matplotlib的时候指定不需要GUI的backend(Agg、Cairo、PS、PDF和SVG)。

import matplotlib.pyplot as plt
plt.switch_backend(‘agg’)

10.Seaborn

Seaborn是一种基于matplotlib的图形可视化python libraty。它提供了一种高度交互式界面,便于用户能够做出各种有吸引力的统计图表。

参考资料
https://baijiahao.baidu.com/s?id=1659039367066798557&wfr=spider&for=pc
https://www.kesci.com/home/column/5b87a78131902f000f668549
https://blog.csdn.net/gdkyxy2013/article/details/79585922

11.Bokeh

针对浏览器中图形演示的交互式绘图工具。目标是使用d3.js样式(不懂)提供的优雅,简洁新颖的图形风格,同时提供大型数据集的高性能交互功能。

他提供的交互式电影检索工具蛮吸引我的吼,并打不开这个网址,😭。
http://demo.bokehplots.com/apps/movies


Python学习笔记(4)——Matplotlib中的annotate(注解)的用法
matplotlib xticks用法
matplotlib.pyplot 标记出曲线上最大点和最小点的位置
matplotlib 中子图subplot 绘图时标题重叠解决办法(备忘)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445019.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

random_shuffle 和transform算法

1)STL中的函数random_shuffle()用来对一个元素序列进行重新排序(随机的),函数原型如下: std::random_shuffle

C语言字符输出格式化

符号属性 长度属性 基本型 所占 位数 取值范围 输入符举例 输出符举例 -- -- char 8 -2^7 ~ 2^7-1 %c %c、%d、%u signed -- char 8 -2^7 ~ 2^7-1 %c %c、%d、%u unsigned -- char 8 0 ~ 2^8-1 %c %c、%d、%u [signed] short [int] 16 -2^15 ~ 2^15-1 %hd %hd unsigned short […

leetcode20 有效的括号

给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串&#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示…

python模块(6)-Pandas 简易使用教程

Pandas 简易教程1.Pandas简介2.创建2.1创建dataFrame2.2创建Series3.dataframe数据访问3.1 获取一列--列标签3.2 获取多列--列标签列表3.3 获取一行--行标签.loc()3.4 获取多行--行切片操作.loc()3.5 index 获取行列信息--df.iloc()3.6 获取一个元素3.7 布尔值选择数据4.datafr…

windows 如何查看端口占用情况?

开始--运行--cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID 之后在任务管理器中找到这个PID所对应的程序如果任务管理器中没有PID这一项,可以在任务管理器中选"查看"-"选择列" 经常,我们在启动应用的时候发现系统需要的端口被别的…

泛型lua的for循环以及lua的特殊的dowhile循环

范型for循环&#xff1a; -- print all values of array a a{1,2,3,4,5,6,7}; for i,v in ipairs(a) do print(v) end 范型for遍历迭代子函数返回的每一个值。 再看一个遍历表key的例子&#xff1a; -- print all keys of table t map {["gaoke"]1,["gaoxin&…

leetcode1 两数之和

给定一个整数数组 nums 和一个目标值 target&#xff0c;请你在该数组中找出和为目标值的那 两个 整数&#xff0c;并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;你不能重复利用这个数组中同样的元素。 示例: 给定 nums [2, 7, 11, 15], t…

Linux(5)-用户/权限-adduser,su,chmod

用户、权限管理1. adduserstep1: 添加新用户step2: 赋予sudo权限。step3: 删除用户2. useradd &#xff08;建议不要使用&#xff09;3. 切换用户su4. 查看系统中所有用户5. 修改用户对路径/文件的读写权限1. adduser step1: 添加新用户 sudo adduser username 按照提示输入新…

网络游戏服务器架构

网络游戏一般采用C/S结构&#xff0c;客户端负责绘制游戏世界的实时画面&#xff0c;服务器端则负责响应所有客户端的连接请求和游戏逻辑处理&#xff0c;并控制所有客户端的画面绘制&#xff0c;客户端与服务器通过网络数据包交互完成每一步游戏逻辑。 网关服务器方式&#x…

leetcode3 无重复字符最长子串

给定一个字符串&#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符…

如何正确编写linux守护进程

1、守护进程&#xff0c;也就是通常说的Daemon进程&#xff0c;是Linux中的后台服务进程。它是一个生存期较长的进程&#xff0c;通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。如果想让某个进程不因为用户或终端或其他地变化而受到影响&#xff0c;那…

Linux(6)-命令行的使用,history,shell脚本

命令行的使用,shell脚本1.终端shell,man1.1 Ctrlr--匹配查找历史命令1.2 history [n] --列出历史命令1.3&#xff01;--执行历史命令2.shell 编程2.1 shell脚本2.2 注释2.3 指明所用的shell2.4 支持函数2.5 使用变量2.6 解析命令行参数2.7 if, for, case, while2.8 shell脚本中…

lua元表的理解

元表概念 &#xff08; Metatable&#xff09;元表由键名为 事件 (event) 和其中的值叫作元方法 (metamethod)组成。在lua中每个值都有一个元表。而table和userdata所定义的值允许自定义对应的元表&#xff0c;其他都是用统一的元表。我的理解&#xff0c;元表&#xff0c;其实…

程序以及论文

本人长期承接大学计算机专业的毕业设计和论文的编写。 主要开发语言C&#xff0c;C &#xff08;windows或linux平台皆可&#xff09;&#xff0c;php&#xff0c;c#&#xff0c;VC 。 课题内容可以是 管理系统&#xff0c;可以是 网站设计开发 可以是 网络聊天 可以是 应用…

Github(1)-概览,初始化仓库

Github网页-本地git1.github网页1.1 主要界面1.1.1github主页1.1.2仓库主页1.1.3 个人页面1.2 注册github账号1.3 新建平台仓库2.git-本地仓库2.1 git本地仓库的三个区域2.2 创建一个本地仓库GitHub 本质上是一个代码托管平台&#xff0c;它提供的是基于 Git 的代码托管服务。G…

Lua 协程

Lua里的协程是一个原来没见过的东西&#xff0c;Python的Gevent也是一个基于coroutine的python网络开发框架。性能据说很不错。协同的一个关键特征是它可以不断颠倒调用者与被调用者之间的关系协程和一般多线程的区别是&#xff0c;一般多线程由系统决定该哪个线程执行&#xf…

leetcode16 最接近的三数之和

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数&#xff0c;使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 例如&#xff0c;给定数组 nums [-1&#xff0c;2&#xff0c;1&#xff0c;-4], 和 target 1…

LINUX下动态链接库的使用-dlopen dlsym dlclose dlerror

dlopen 基本定义   功能&#xff1a;打开一个动态链接库 包含头文件&#xff1a; #include <dlfcn.h> 函数定义&#xff1a; void * dlopen( const char * pathname, int mode ); 函数描述&#xff1a; 在dlopen的&#xff08;&#xff09;函数以指定模式打开指定的动…

leecode11 盛水最多的容器

给定 n 个非负整数 a1&#xff0c;a2&#xff0c;...&#xff0c;an&#xff0c;每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线&#xff0c;垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多…

Github(2)-本地配置git

本地配置git1.注册账号2.安装git工具3.配置git 账号1.注册账号 github网页注册github账户 2.安装git工具 本地安装git工具 step1 查看是否安装git git version step2 mac 安装 brew install git step2 linux安装 sudo apt-get install git 3.配置git 账号 创建ssh key, 配置…