Python——matplotlib

2023-10-31

一、基础

Python Matplotlib ç»å¾ä½¿ç¨æå ï¼é代ç ï¼

plt.savefig(‘test’, dpi = 600) :将绘制的图画保存成png格式,命名为 test

plt.ylabel(‘Grade’) :  y轴的名称

plt.axis([-1, 10, 0, 6]) :  x轴起始于-1,终止于10 ,y轴起始于0,终止于6

plt.subplot(3,2,4) :  分成3行2列,共6个绘图区域,在第4个区域绘图。排序为行优先。也可 plt.subplot(324),将逗号省略。

1.1 Figure

在任何绘图之前,我们需要一个Figure对象,可以理解成我们需要一张画板才能开始绘图。

import matplotlib.pyplot as plt
fig = plt.figure()

1.2 Axes

在拥有Figure对象之后,在作画前我们还需要轴,没有轴的话就没有绘图基准,所以需要添加Axes。也可以理解成为真正可以作画的纸。

fig = plt.figure()
ax = fig.add_subplot(111)
ax.set(xlim=[0.5, 4.5], ylim=[-2, 8], title='An Example Axes',
       ylabel='Y-Axis', xlabel='X-Axis')
plt.show()

上的代码,在一幅图上添加了一个Axes,然后设置了这个Axes的X轴以及Y轴的取值范围(这些设置并不是强制的,后面会再谈到关于这些设置),效果如下图:
这里写图片描述
对于上面的fig.add_subplot(111)就是添加Axes的,参数的解释的在画板的第1行第1列的第一个位置生成一个Axes对象来准备作画。也可以通过fig.add_subplot(2, 2, 1)的方式生成Axes,前面两个参数确定了面板的划分,例如 2, 2会将整个面板划分成 2 * 2 的方格,第三个参数取值范围是 [1, 2*2] 表示第几个Axes。如下面的例子:

fig = plt.figure()
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax3 = fig.add_subplot(224)


1.3 Multiple Axes

可以发现我们上面添加 Axes 似乎有点弱鸡,所以提供了下面的方式一次性生成所有 Axes:

fig, axes = plt.subplots(nrows=2, ncols=2)
axes[0,0].set(title='Upper Left')
axes[0,1].set(title='Upper Right')
axes[1,0].set(title='Lower Left')
axes[1,1].set(title='Lower Right')

 

axes 成了我们常用二维数组的形式访问,这在循环绘图时,额外好用。
 

Plot的图表函数

plt.plot(x,y , fmt)  :绘制坐标图

plt.boxplot(data, notch, position): 绘制箱形图

plt.bar(left, height, width, bottom) : 绘制条形图

plt.barh(width, bottom, left, height) : 绘制横向条形图

plt.polar(theta, r) : 绘制极坐标图

plt.pie(data, explode) : 绘制饼图

plt.scatter(x, y) :绘制散点图

plt.hist(x, bings, normed) : 绘制直方图

 

绘制饼图

 

explode表示突出,如橘色这一块突出;autopct  表示显示数据的格式; shadow表示二维饼图;startangle表示起始的角度;

此为椭圆形饼图,要为圆形,可添加:  plt.axis(‘equal’)

 

绘制直方图

bings将直方图的取值范围进行均等划分bings个区间;

normed =1 表示将出现频次进行了归一化。 normed=0,则为频次;

alpha表示直方图的透明度[0, 1] ;

histtype = ‘stepfilled’  表示去除条柱的黑色边框

 

面向对象的极坐标图绘制

 

面向对象散点图绘制

 

将subplots()变成一个对象,fig和ax表示subplots生成的图表以及相关区域。subplots为空时,默认为subplots(111)

 其它代码:https://www.cnblogs.com/flowyourheart/p/Python-ke-shi-hua-kuMatplotlib-shi-yong-zong-jie.html

二、其它

1、画框

import matplotlib.patches as patches
import matplotlib.pyplot as plt
import cv2

img=cv2.imread("images/1.jpg")
plt.figure(8)
plt.imshow(imgSrc)
currentAxis=plt.gca()
rect=patches.Rectangle((200, 600),550,650,linewidth=1,edgecolor='r',facecolor='none')
currentAxis.add_patch(rect)
--------------------- 
作者:yjl9122 
来源:CSDN 
原文:https://blog.csdn.net/yjl9122/article/details/70762476 
版权声明:本文为博主原创文章,转载请附上博文链接!

2、加子图

import numpy as np
import matplotlib.pyplot as plt
 
x = np.arange(0, 100)
 
fig = plt.figure()
 
ax1 = fig.add_subplot(221)
ax1.plot(x, x)
 
ax2 = fig.add_subplot(222)
ax2.plot(x, -x)
 
ax3 = fig.add_subplot(223)
ax3.plot(x, x ** 2)
 
ax4 = fig.add_subplot(224)
ax4.plot(x, np.log(x))
 
plt.show()
--------------------- 
作者:有一种宿命叫无能为力 
来源:CSDN 
原文:https://blog.csdn.net/you_are_my_dream/article/details/53439518 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

布局、图例说明、边界等

3.1区间上下限

当绘画完成后,会发现X、Y轴的区间是会自动调整的,并不是跟我们传入的X、Y轴数据中的最值相同。为了调整区间我们使用下面的方式:

ax.set_xlim([xmin, xmax])   #设置X轴的区间
ax.set_ylim([ymin, ymax])   #Y轴区间
ax.axis([xmin, xmax, ymin, ymax])   #X、Y轴区间
ax.set_ylim(bottom=-10)     #Y轴下限
ax.set_xlim(right=25)       #X轴上限

具体效果见下例:

x = np.linspace(0, 2*np.pi)
y = np.sin(x)
fig, (ax1, ax2) = plt.subplots(2)
ax1.plot(x, y)
ax2.plot(x, y)
ax2.set_xlim([-1, 6])
ax2.set_ylim([-1, 3])
plt.show()

可以看出修改了区间之后影响了图片显示的效果。


3.2 图例说明

我们如果我们在一个Axes上做多次绘画,那么可能出现分不清哪条线或点所代表的意思。这个时间添加图例说明,就可以解决这个问题了,见下例:

fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4], [10, 20, 25, 30], label='Philadelphia')
ax.plot([1, 2, 3, 4], [30, 23, 13, 4], label='Boston')
ax.scatter([1, 2, 3, 4], [20, 10, 30, 15], label='Point')
ax.set(ylabel='Temperature (deg C)', xlabel='Time', title='A tale of two cities')
ax.legend()
plt.show()

在绘图时传入 label 参数,并最后调用ax.legend()显示体力说明,对于 legend 还是传入参数,控制图例说明显示的位置:
Location String     Location Code
‘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.3 区间分段

默认情况下,绘图结束之后,Axes 会自动的控制区间的分段。见下例:

data = [('apples', 2), ('oranges', 3), ('peaches', 1)]
fruit, value = zip(*data)

fig, (ax1, ax2) = plt.subplots(2)
x = np.arange(len(fruit))
ax1.bar(x, value, align='center', color='gray')
ax2.bar(x, value, align='center', color='gray')

ax2.set(xticks=x, xticklabels=fruit)

#ax.tick_params(axis='y', direction='inout', length=10) #修改 ticks 的方向以及长度
plt.show()

上面不仅修改了X轴的区间段,并且修改了显示的信息为文本。


3.4 布局

当我们绘画多个子图时,就会有一些美观的问题存在,例如子图之间的间隔,子图与画板的外边间距以及子图的内边距,下面说明这个问题:

fig, axes = plt.subplots(2, 2, figsize=(9, 9))
fig.subplots_adjust(wspace=0.5, hspace=0.3,
                    left=0.125, right=0.9,
                    top=0.9,    bottom=0.1)

#fig.tight_layout() #自动调整布局,使标题之间不重叠
plt.show()

通过fig.subplots_adjust()我们修改了子图水平之间的间隔wspace=0.5,垂直方向上的间距hspace=0.3,左边距left=0.125 等等,这里数值都是百分比的。以 [0, 1] 为区间,选择left、right、bottom、top 注意 top 和 right 是 0.9 表示上、右边距为百分之10。不确定如果调整的时候,fig.tight_layout()是一个很好的选择。之前说到了内边距,内边距是子图的,也就是 Axes 对象,所以这样使用 ax.margins(x=0.1, y=0.1),当值传入一个值时,表示同时修改水平和垂直方向的内边距。

这里写图片描述
观察上面的四个子图,可以发现他们的X、Y的区间是一致的,而且这样显示并不美观,所以可以调整使他们使用一样的X、Y轴:

fig, (ax1, ax2) = plt.subplots(1, 2, sharex=True, sharey=True)
ax1.plot([1, 2, 3, 4], [1, 2, 3, 4])
ax2.plot([3, 4, 5, 6], [6, 5, 4, 3])
plt.show()


3.5 轴相关

改变边界的位置,去掉四周的边框:

fig, ax = plt.subplots()
ax.plot([-2, 2, 3, 4], [-10, 20, 25, 5])
ax.spines['top'].set_visible(False)     #顶边界不可见
ax.xaxis.set_ticks_position('bottom')  # ticks 的位置为下方,分上下的。
ax.spines['right'].set_visible(False)   #右边界不可见
ax.yaxis.set_ticks_position('left')  

# "outward"
# 移动左、下边界离 Axes 10 个距离
#ax.spines['bottom'].set_position(('outward', 10))
#ax.spines['left'].set_position(('outward', 10))

# "data"
# 移动左、下边界到 (0, 0) 处相交
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))

# "axes"
# 移动边界,按 Axes 的百分比位置
#ax.spines['bottom'].set_position(('axes', 0.75))
#ax.spines['left'].set_position(('axes', 0.3))

plt.show()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python——matplotlib 的相关文章

  • 什么时候在Python中使用弱引用?

    谁能解释一下弱引用的用法吗 The 文档 http docs python org library weakref html没有具体解释 只是说GC可以随时销毁通过弱引用链接到的对象 那么拥有一个随时可能消失的物体还有什么意义呢 如果我需要
  • 当遵循文档代码时,Python 多处理返回 AttributeError [重复]

    这个问题在这里已经有答案了 我决定尝试使用多处理器模块来帮助加速我的程序 为了弄清楚这一点 我尝试使用有关多处理的官方 python 文档中的一些代码示例 第一次尝试 介绍 https docs python org 3 library m
  • Django:NoReverseMatch at /'myapp'不是注册的命名空间

    我在模板渲染期间遇到此错误 我想做的是允许用户上传 csv 然后将数据处理到模型中 第 109 行出错 myapp 不是已注册的命名空间 这是我的第 109 行代码
  • 创建一个支持 json 序列化的类以与 Celery 一起使用

    我正在使用 Celery 来运行一些后台任务 其中一项任务返回我创建的 python 类 考虑到有关使用 pickle 的警告 我想使用 json 来序列化和反序列化此类 有没有一种简单的内置方法可以实现这一目标 该类非常简单 它包含 3
  • 查找数据集中的异常值

    我有一个 python 脚本 它创建服务器正常运行时间和性能数据列表的列表 其中每个子列表 或 行 包含特定集群的统计信息 例如 格式良好的它看起来像这样 Cluster Availability Requests Sec Errors S
  • Python:访问另一个类中一个类的属性和方法

    假设我有两个 A 类和 B 类 Class A A s attributes and methods here Class B B s attributes and methods here 现在我可以评估 B 类对象中 A 的属性 如下所
  • 使用 setuptools (pip) 时如何打印警告和错误

    我正在使用 setuptools 来打包代码 以便可以使用以下命令轻松安装它 cd project name pip install 在设置过程中 我想警告用户有关预先存在的配置文件的信息 并在系统上打印一些安装后说明 例如 etc pro
  • 在 PyCharm 中启用终端模拟

    很多人告诉过我和PyCharm 2 7 的 PyCharm 发行说明 https www jetbrains com pycharm whatsnew whatsnew 27 html吹捧那个PyCharm包括完整的终端仿真 我认为这是关于
  • 从 java 代码运行 Python 脚本

    这是我第一次在java中尝试python 我正在尝试从我的代码执行 python 脚本 如下所示 Process process Runtime getRuntime exec python C Users username Desktop
  • 并行执行按位运算的代码

    我有这段代码 通过将该 AU 矩阵的每个字节 8 个元素打包到 A 中来减少内存消耗 从而使 100k 200k 矩阵占用更少的空间 正如您所期望的 这段代码需要永远运行 我也计划将行数增加到 200k 我正在一个非常强大的实例 CPU 和
  • 映射 2 个数据帧并替换目标数据帧中匹配值的标头

    我有一个数据框 df1 SAP Name SAP Class SAP Sec Avi 5 C Rison 6 A Slesh 7 B San 8 C Sud 7 B df2 Name Fi Class Avi 5 Rison 6 Slesh
  • 为什么我的字符串中出现不需要的换行符?

    这应该很简单 这很愚蠢 但我无法让它发挥作用 我有一个在读取文件时定义的标头 if gene env in line or gene HIV2gp7 in line header line 现在这个标题看起来像 gt lcl NC 0018
  • os.walk 无需深入研究下面的目录

    我该如何限制os walk只返回我提供的目录中的文件 def dir list self dir name whitelist outputList for root dirs files in os walk dir name for f
  • 使用 SQLAlchemy 查询 Pandas DataFrame 时重命名列

    当您将数据查询到 pandas 数据帧时 有没有办法保留 SqlAlchemy 属性名称 这是我的数据库的简单映射 对于 school 表 我将数据库名称 SchoolDistrict 重命名为较短的 district 我从 DBA 中删除
  • pip 升级到 pip 10.x.x 后解析需求文件的正确方法?

    所以今天我确实发现随着发布pip 10 x x the req软件包更改了其目录 现在可以在下面找到pip internal req 由于通常的做法是使用parse requirements功能在你的setup py从需求文件中安装所有依赖
  • pandas groupby 中两个系列的最大值和最小值

    是否可以从 groupby 中的两个系列中获取最小值和最大值 例如下面的情况 分组时c 我怎样才能得到最小值和最大值a and b同时 df pd DataFrame a 10 20 3 40 55 b 5 14 8 50 60 c x x
  • Python pandas:向我的数据框中添加一列来计算变量

    我有一个像这样的数据框 gt org group org1 1 org2 1 org3 2 org4 3 org5 3 org6 3 我想将列 count 添加到 gt 数据帧以计算组的成员数量 预期结果如下 org group count
  • 为什么变量 1 += 变量 2 比变量 1 = 变量 1 + 变量 2 快得多?

    我继承了一些 Python 代码 用于创建巨大的表 最多 19 列宽 5000 行 花了九秒用于在屏幕上绘制表格 我注意到每一行都是使用以下代码添加的 sTable sTable n GetRow where sTable是一个字符串 我将
  • VSCode IntelliSense 认为 Python 'function()' 类存在

    VSCode IntelliSense 正在完成一个名为的 Python 类function 这似乎不存在 例如 这似乎是有效的代码 def foo value return function value foo 0 But functio
  • 合并共享属性的节点

    EDITED 我真的需要 Networkx graph 专家的帮助 假设我有以下数据框 我想将这些数据框转换为图表 然后我想根据描述和优先级属性将两个图映射到相应的节点 df1 From description To priority 10

随机推荐

  • selenium中,div弹出提示框,如何定位?

    弹出框是用div模拟出来的 用switch to window和switch to frame是切换不过去的 那么如何去定位到弹框呢 可以这样处理 一般弹出窗口是在最顶层的视图上的 同时mianframe在顶层视图下面 所以这里我通brow
  • GOM登录器配置免费版生成图文教程

    GOM登录器配置生成图文教程 GOM引擎我发布的算比较多了 喜欢的朋友我都分享这款引擎的版本 原因就是这款引擎的版本漂亮 功能系统多 活动和玩法也都非常的丰富 还有很多的功能是其他引擎无法做到的 所以我最近研究的也就比较多了 有很多朋友会问
  • 通过一个链接打开本地app,或者去下载app

    以前支付宝发短信给你手机 然后你点开这个链接的时候会发现它自动的打开了支付宝软件 这个是如何做到的呢 我认为实现的原理就是 这个链接通过浏览器打开 然后自动执行js方法 如果本地有支付宝软件 就去打开这个方法 当然支付宝app也要做对应的处
  • Unity 各个坐标系之间的转换

    Unity 各个坐标系之间的转换 using UnityEngine public class PositionConvert
  • PMD代码规范检测

    PMD插件安装与使用 PMD是一种开源分析Java代码错误的工具 通过静态分析获知代码错误 一 外网安装 安装PMD插件 打开Setting的Plugins窗口 点击Browse repositores 按钮 查找PMD进行安装 插件安装成
  • [转]三极管的集电结反向偏置电压

    转自百度空间 http hi baidu com liujun585 blog item 08fa5160751b2547eaf8f86f html 三极管的集电结反向偏置电压 我先说一下三极管各极名称起名原因 以NPN为例 发射极 发射电
  • mysql中workbench下载

    近日下载完mysql后发现workbench没有下载 研究后发现下载方法 1 在开始里找到这个MySQL Installer Community并打开 2 点击add 3 就可以找到workbanch了 然后就可以下载了
  • 2022数学建模美赛A题详细思路

    已更新 公众号 千千小屋grow 2022 MCM A题 自行车手的能量分布 背景 公路自行车赛有很多种类型 包括标准赛 团体计时赛和个人计时赛 在这些比赛中 骑手成功的机会可能会根据比赛的类型 赛道和骑手的能力而有所不同 在个人计时赛中
  • Ubuntu 16.04.6 搭建FTP服务器

    Ubuntu 16 04 6 搭建FTP服务器 安装vsftpd3 0 3 FTP服务器 配置vsftpd 创建虚拟用户 新建用户例子 安装vsftpd3 0 3 FTP服务器 sudo apt install vsftpd 配置vsftp
  • SpringCloud开发-云效流水线使用

    前言 2018年使用云效的时候 当时功能还不完善 并且有很多流程走不通 因此没有正式使用流水线做CICD工作 后来有幸听了云效产品经理分享 会议上了解到云效将会重构 就等着重构后再来使用 今年刚好需要使用CICD 就再研究了下新版的云效 其
  • 高斯-赛得尔迭代式 c++_高斯ALT 71,一把让你意想不到的机械键盘

    我记得我入坑机械键盘的第一把键盘是108键的 因为我觉得键盘就应该是这样 不完整的键位还叫键盘么 但是我渐渐发现事实上键盘上的好多按键我基本很少用或者不用 那么我有必要把桌面本来就紧凑的空间留给那些我不用的按键么 在想通了这个问题之后 我爱
  • 芭乐BootstrapTable视频组件不同使用方法的效率各有差异

    自己需求处理的问题 需求 设备端批量发送数据过来 数据已依照特定字段进行排序 现在自己需求依照传过来的数据动态更新表格 表格的显示区域有限制 因为一些原因 终究确认运用 Bootstrap Table 组件完成该功能 遇到的问题 问题 运用
  • dw怎么让html使用css样式,dw怎么用css样式?

    dw怎么用css样式 首先介绍一下CSS样式的属性 CSS样式属性被分为八大类 类型 背景 区块 方框 边框 列表 定位 扩展 类型主要定义文本的字体 大小 颜色 行高和修饰等 如图所示 方法一 内联样式可以通过style属性直接套进定义对
  • 百度地图API 实现多个已知地址的同时展示

    用到的API类 Icon LocalSearch Label Point Marker NavigationControl OverviewMapControl 具体的使用就不赘述了 写这个的背景 公司要一起出去TB 然后选择了自驾 就要收
  • 在Linux服务器上出现PermissionError: [Errno 13] Permission denied: ‘ffmpeg‘

    下载参考链接中的ffmpeg压缩包后 通过filezilla拖到服务器的 anaconda3 envs envs name bin中 显示PermissionError Errno 13 Permission denied ffmpeg 运
  • 蓝桥杯超声波,完全不抖,测距一米以上

    定时器扫描的方法 include
  • Python之条件语句&逻辑运算符

    目录 一 逻辑运算符 1 基本运算符 2 比较运算符 3 赋值运算符 二 if条件语句
  • Array merging

    Array merging 题意 给出两个长度为n的数组a b 现在每次可以取出任意一个数组的第一个元素 放到c数组的后面 c数组一开始为空 求c数组连续相等的最长子串长度 思路 这里可以用两个map把a b数组每个元素对应的连续相等的最长
  • VisualStudio快捷键

    常用 注释 选定要注释的区域 ctrl K 然后再ctrl C 解注释 选定要注释的区域 ctrl U 1 仿制 剪切 删去整行代码 1 假如你想仿制一整行代码 只需将光标移至该行 再运用组合键 Ctrl C 来完结仿制操作 而无需挑选整行
  • Python——matplotlib

    一 基础 plt savefig test dpi 600 将绘制的图画保存成png格式 命名为 test plt ylabel Grade y轴的名称 plt axis 1 10 0 6 x轴起始于 1 终止于10 y轴起始于0 终止于6