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,一经查实,立即删除!

相关文章

leetcode20 有效的括号

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

leetcode1 两数之和

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

leetcode3 无重复字符最长子串

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

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脚本中…

程序以及论文

本人长期承接大学计算机专业的毕业设计和论文的编写。 主要开发语言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…

leetcode16 最接近的三数之和

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

leecode11 盛水最多的容器

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

leecode26 删除排序数组中的重复项

给定一个排序数组&#xff0c;你需要在原地删除重复出现的元素&#xff0c;使得每个元素只出现一次&#xff0c;返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定数组 nums [1,1,2…

leecode53 最大子序列和

给定一个整数数组 nums &#xff0c;找到一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大&#xff0c;为 6。 思路&#xff1a;…

Github(3)-本地文件管理

使用github 托管代码简单使用教程--本地文件管理1.基本概念2.本地文件管理2.1 git add2.2 git status2.3 git commit2.3 git log2.5 git reset --hard 版本回退2.6 git reflog2.7 git diff2.8 git checkout --file 工作区文件恢复2.9 git rm 删除版本库里的文件廖雪峰老师博文学…

leecode62 不同路径

示例 1: 输入: m 3, n 2 输出: 3 解释: 从左上角开始&#xff0c;总共有 3 条路径可以到达右下角。 1. 向右 -> 向右 -> 向下 2. 向右 -> 向下 -> 向右 3. 向下 -> 向右 -> 向右 示例 2: 输入: m 7, n 3 输出: 28 思路&#xff1a;太过于简单&#xf…

leetcode64 最小路径和

给定一个包含非负整数的 m x n 网格&#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总…

leetcode300 最长上升子序列

经典题&#xff0c;不解释&#xff0c;可以看我之前文章。 普通dp public class Solution {public int lengthOfLIS(int[] nums) {if (nums.length 0) {return 0;}int[] dp new int[nums.length];dp[0] 1;int maxans 1;for (int i 1; i < dp.length; i) {int maxval …

leecode5 最长回文子串

给定一个字符串 s&#xff0c;找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1&#xff1a; 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2&#xff1a; 输入: "cbbd" 输出: "bb"…

服务器端开发的一些建议

摘要: 本文作为游戏服务器端开发的基本大纲&#xff0c;是游戏实践开发中的总结。第一部分专业基础&#xff0c;用于指导招聘和实习考核&#xff0c; 第二部分游戏入门&#xff0c;讲述游戏服务器端开发的基本要点&#xff0c;第三部分服务端架构&#xff0c;介绍架构设计中的一…

leetcode63 不同路径II

一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为“Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为“Finish”&#xff09;。 现在考虑网格中有障碍物。那么从左上角到右下角将…

leetcode55 跳跃游戏 秒杀所有答案

给定一个非负整数数组&#xff0c;你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 我们可以先跳 1 步&#xff0c;从位置 0 到达 位置 1, 然后再从位置 …

leetcode45 跳跃游戏II 秒杀所有答案

给定一个非负整数数组&#xff0c;你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 示例: 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 …

MachineLearning(7)-决策树基础+sklearn.DecisionTreeClassifier简单实践

sklearn.DecisionTreeClassifier决策树简单使用1.决策树算法基础2.sklearn.DecisionTreeClassifier简单实践2.1 决策树类2.3 决策树构建2.3.1全数据集拟合&#xff0c;决策树可视化2.3.2交叉验证实验2.3.3超参数搜索2.3.4模型保存与导入2.3.5固定随机数种子参考资料1.决策树算法…