基于Python的matplotlib基础介绍
liuian 2024-12-01 00:56 41 浏览
数据可视化非常重要,因为错误或不充分的数据表示方法可能会毁掉原本很出色的数据分析工作。
matplotlib 库是专门用于开发2D图表(包括3D图表)的,突出优点:
- 使用起来极为简单。
- 以渐进、交互式方式实现数据可视化。
- 表达式和文本使用LaTeX排版。
- 对图像元素控制力强。
- 可输出PNG、PDF、SVG和EPS等多种格式。
安装
conda install matplotlib或者
pip install matplotlibmatplotlib 架构
matplotlib 的主要任务之一,就是提供一套表示和操作图形对象(主要对象)以及它的内部对象的函数和工具。其不仅可以处理图形,还提供事件处理工具,具有为图形添加动画效果的能力。有了这些附加功能,matplotlib 就能生成以键盘按键或鼠标移动触发的事件的交互式图表。
从逻辑上来讲,matplotlib 的整体架构为3层,各层之间单向通信:
- Scripting (脚本)层。
- Artist (表现)层。
- Backend (后端)层。
一、matplotlib的基本用法
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-np.pi, np.pi, 30) # 在区间内生成30个等差数
y = np.sin(x)
print('x = ', x)
print('y = ', y)
输出:
x = [-3.14159265 -2.92493109 -2.70826953 -2.49160797 -2.2749464 -2.05828484
-1.84162328 -1.62496172 -1.40830016 -1.19163859 -0.97497703 -0.75831547
-0.54165391 -0.32499234 -0.10833078 0.10833078 0.32499234 0.54165391
0.75831547 0.97497703 1.19163859 1.40830016 1.62496172 1.84162328
2.05828484 2.2749464 2.49160797 2.70826953 2.92493109 3.14159265]
y = [-1.22464680e-16 -2.14970440e-01 -4.19889102e-01 -6.05174215e-01
-7.62162055e-01 -8.83512044e-01 -9.63549993e-01 -9.98533414e-01
-9.86826523e-01 -9.28976720e-01 -8.27688998e-01 -6.87699459e-01
-5.15553857e-01 -3.19301530e-01 -1.08119018e-01 1.08119018e-01
3.19301530e-01 5.15553857e-01 6.87699459e-01 8.27688998e-01
9.28976720e-01 9.86826523e-01 9.98533414e-01 9.63549993e-01
8.83512044e-01 7.62162055e-01 6.05174215e-01 4.19889102e-01
2.14970440e-01 1.22464680e-16]- 画一条曲线
plt.figure() # 创建一个新的窗口
plt.plot(x, y) # 画一个x与y相关的曲线
plt.show()# 显示图像- 画多条曲线以及添加坐标轴和标签
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-np.pi, np.pi, 100) # 在区间内生成21个等差数
y = np.sin(x)
linear_y = 0.2 * x + 0.1
plt.figure(figsize = (8, 6)) # 自定义窗口的大小
plt.plot(x, y)
plt.plot(x, linear_y, color = "red", linestyle = '--') # 自定义颜色和表示方式
plt.title('y = sin(x) and y = 0.2x + 0.1') # 定义该曲线的标题
plt.xlabel('x') # 定义横轴标签
plt.ylabel('y') # 定义纵轴标签
plt.show()
- 指定坐标范围 and 设置坐标轴刻度
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-np.pi, np.pi, 100) # 在区间内生成21个等差数
y = np.sin(x)
linear_y = 0.2 * x + 0.1
plt.figure(figsize = (8, 6)) # 自定义窗口的大小
plt.plot(x, y)
plt.plot(x, linear_y, color = "red", linestyle = '--') # 自定义颜色和表示方式
plt.title('y = sin(x) and y = 0.2x + 0.1') # 定义该曲线的标题
plt.xlabel('x') # 定义横轴标签
plt.ylabel('y') # 定义纵轴标签
plt.xlim(-np.pi, np.pi)
plt.ylim(-1, 1)
# 重新设置x轴的刻度
# plt.xticks(np.linspace(-np.pi, np.pi, 5))
x_value_range = np.linspace(-np.pi, np.pi, 5)
x_value_strs = [r'$\pi#39;, r'$-\frac{\pi}{2}#39;, r'$0#39;, r'$\frac{\pi}{2}#39;, r'$\pi#39;]
plt.xticks(x_value_range, x_value_strs)
plt.show() # 显示图像- 定义原点在中心的坐标轴
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-np.pi, np.pi, 100)
y = np.sin(x)
linear_y = 0.2 * x + 0.1
plt.figure(figsize = (8, 6))
plt.plot(x, y)
plt.plot(x, linear_y, color = "red", linestyle = '--')
plt.title('y = sin(x) and y = 0.2x + 0.1')
plt.xlabel('x')
plt.ylabel('y')
plt.xlim(-np.pi, np.pi)
plt.ylim(-1, 1)
# plt.xticks(np.linspace(-np.pi, np.pi, 5))
x_value_range = np.linspace(-np.pi, np.pi, 5)
x_value_strs = [r'$\pi#39;, r'$-\frac{\pi}{2}#39;, r'$0#39;, r'$\frac{\pi}{2}#39;, r'$\pi#39;]
plt.xticks(x_value_range, x_value_strs)
ax = plt.gca() # 获取坐标轴
ax.spines['right'].set_color('none') # 隐藏上方和右方的坐标轴
ax.spines['top'].set_color('none')
# 设置左方和下方坐标轴的位置
ax.spines['bottom'].set_position(('data', 0)) # 将下方的坐标轴设置到y = 0的位置
ax.spines['left'].set_position(('data', 0)) # 将左方的坐标轴设置到 x = 0 的位置
plt.show() # 显示图像
- legend图例
使用xticks()和yticks()函数替换轴标签,分别为每个函数传入两列数值。第一个列表存储刻度的位置,第二个列表存储刻度的标签。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-np.pi, np.pi, 100)
y = np.sin(x)
linear_y = 0.2 * x + 0.1
plt.figure(figsize = (8, 6))
# 为曲线加上标签
plt.plot(x, y, label = "y = sin(x)")
plt.plot(x, linear_y, color = "red", linestyle = '--', label = 'y = 0.2x + 0.1')
plt.title('y = sin(x) and y = 0.2x + 0.1')
plt.xlabel('x')
plt.ylabel('y')
plt.xlim(-np.pi, np.pi)
plt.ylim(-1, 1)
# plt.xticks(np.linspace(-np.pi, np.pi, 5))
x_value_range = np.linspace(-np.pi, np.pi, 5)
x_value_strs = [r'$\pi#39;, r'$-\frac{\pi}{2}#39;, r'$0#39;, r'$\frac{\pi}{2}#39;, r'$\pi#39;]
plt.xticks(x_value_range, x_value_strs)
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))
# 将曲线的信息标识出来
plt.legend(loc = 'lower right', fontsize = 12)
plt.show() legend方法中的loc 参数可选设置
位置字符串 | 位置编号 | 位置表述 |
‘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 | 正中间 |
二、柱状图
使用的方法:plt.bar
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize = (16, 12))
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([3, 5, 7, 6, 2, 6, 10, 15])
plt.plot(x, y, 'r', lw = 5) # 指定线的颜色和宽度
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([13, 25, 17, 36, 21, 16, 10, 15])
plt.bar(x, y, 0.2, alpha = 1, color='b') # 生成柱状图,指明图的宽度,透明度和颜色
plt.show()有的时候柱状图会出现在x轴的俩侧,方便进行比较,代码实现如下:
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize = (16, 12))
n = 12
x = np.arange(n) # 按顺序生成从12以内的数字
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)
# 设置柱状图的颜色以及边界颜色
#+y表示在x轴的上方 -y表示在x轴的下方
plt.bar(x, +y1, facecolor = '#9999ff', edgecolor = 'white')
plt.bar(x, -y2, facecolor = '#ff9999', edgecolor = 'white')
plt.xlim(-0.5, n) # 设置x轴的范围,
plt.xticks(()) # 可以通过设置刻度为空,消除刻度
plt.ylim(-1.25, 1.25) # 设置y轴的范围
plt.yticks(())
# plt.text()在图像中写入文本,设置位置,设置文本,ha设置水平方向对其方式,va设置垂直方向对齐方式
for x1, y in zip(x, y2):
plt.text(x1, -y - 0.05, '%.2f' % y, ha = 'center', va = 'top')
for x1, y in zip(x, y1):
plt.text(x1, y + 0.05, '%.2f' % y, ha = 'center', va = 'bottom')
plt.show()
三、散点图
import numpy as np
import matplotlib.pyplot as plt
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N))**2
plt.scatter(x, y, s = area,c = colors, alpha = 0.8)
plt.show()
四、等高线图
import matplotlib.pyplot as plt
import numpy as np
def f(x, y):
return (1 - x / 2 + x ** 5 + y ** 3) * np.exp(-x ** 2 - y ** 2)
n = 256
x = np.linspace(-3, 3, n)
y = np.linspace(-3, 3, n)
X, Y = np.meshgrid(x, y) # 生成网格坐标 将x轴与y轴正方形区域的点全部获取
line_num = 10 # 等高线的数量
plt.figure(figsize = (16, 12))
#contour 生成等高线的函数
#前俩个参数表示点的坐标,第三个参数表示等成等高线的函数,第四个参数表示生成多少个等高线
C = plt.contour(X, Y, f(X, Y), line_num, colors = 'black', linewidths = 0.5) # 设置颜色和线段的宽度
plt.clabel(C, inline = True, fontsize = 12) # 得到每条等高线确切的值
# 填充颜色, cmap 表示以什么方式填充,hot表示填充热量的颜色
plt.contourf(X, Y, f(X, Y), line_num, alpha = 0.75, cmap = plt.cm.hot)
plt.show()五、处理图片
import matplotlib.pyplot as plt
import matplotlib.image as mpimg # 导入处理图片的库
import matplotlib.cm as cm # 导入处理颜色的库colormap
plt.figure(figsize = (16, 12))
img = mpimg.imread('image/fuli.jpg')# 读取图片
print(img) # numpy数据
print(img.shape) #
plt.imshow(img, cmap = 'hot')
plt.colorbar() # 得到颜色多对应的数值
plt.show()
[[[ 11 23 63]
[ 12 24 64]
[ 1 13 55]
...
[ 1 12 42]
[ 1 12 42]
[ 1 12 42]]
[[ 19 31 71]
[ 3 15 55]
[ 0 10 52]
...
[ 0 11 39]
[ 0 11 39]
[ 0 11 39]]
[[ 22 34 74]
[ 3 15 55]
[ 7 19 61]
...
[ 0 11 39]
[ 0 11 39]
[ 0 11 39]]
...
[[ 84 125 217]
[ 80 121 213]
[ 78 118 214]
...
[ 58 90 191]
[ 54 86 187]
[ 53 85 186]]
[[ 84 124 220]
[ 79 119 215]
[ 78 117 218]
...
[ 55 87 188]
[ 55 87 188]
[ 55 87 188]]
[[ 83 121 220]
[ 80 118 219]
[ 83 120 224]
...
[ 56 88 189]
[ 58 90 191]
[ 59 91 192]]]
(728, 516, 3)利用numpy矩阵得到图片
import matplotlib.pyplot as plt
import matplotlib.cm as cm # 导入处理颜色的库colormap
import numpy as np
size = 8
# 得到一个8*8数值在(0, 1)之间的矩阵
a = np.linspace(0, 1, size ** 2).reshape(size, size)
plt.figure(figsize = (16, 12))
plt.imshow(a)
plt.show()六、3D图
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D # 导入Axes3D对象
fig = plt.figure(figsize = (16, 12))
ax = fig.add_subplot(111, projection = '3d') # 得到3d图像
x = np.arange(-4, 4, 0.25)
y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(x, y) # 生成网格
Z = np.sqrt(X ** 2 + Y ** 2)
# 画曲面图 # 行和列对应的跨度 # 设置颜色
ax.plot_surface(X, Y, Z, rstride = 1, cstride = 1, cmap = plt.get_cmap('rainbow'))
plt.show()
以上是matplotlib基于测试数据的数据可视化,结合实际项目中数据,代码稍加修改,即可有让人印象深刻的效果
相关推荐
- psp模拟器ios(psp模拟器ios推荐)
-
psp手机模拟器推荐PPSSPP,作为最流行的开源PSP模拟器,因为其强大的功能和兼容性广受玩家们喜爱。虽然提供了PC和安卓双平台的支持,但是有碍于安卓设备的硬件,移动端PPSSPP的功能并不完整。不...
- 台式机重装系统按f几(重装电脑系统按f几)
-
F8、F9、F10、F11、F12、F2、del。一般用到这几个。下面以联想电脑装WIN10系统为例:1、将制作好的U盘插入要重装系统的电脑,开机画面出现电脑品牌logo时,不停地按“f2键”进入“B...
- win10激活错误代码0x8007007b
-
Win10激活出现0x8007007b解决方法如下1、找到计算机,右键点击属性,确认你的电脑系统是否是windows10。2、鼠标右击桌面,依次点击个性化-主题-桌面图标设置,勾选计算机后依次点击应用...
-
- 4000台式电脑最好的组装配置
-
四千元价格组装电脑主机与五千元组装电脑主机的价格类似,因为电脑主机就几个大部件,电脑主机主板是多少代的产品?主板内存的插槽数?电脑处理器等如果是自己组装,都可以配置到十二代产品,电脑硬盘可以分为256G固态硬盘做系统盘,1T机械硬盘作为工作...
-
2025-11-06 20:05 liuian
- linux是一种什么系统(linux属于什么系统)
-
Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。其内核由林纳斯·本纳第克特·托瓦兹于1991年1...
- 手机管理大师免费版(手机管理大师极速版)
-
使用手机“文件管理”打开文件夹时提示访问受限,需要前往“文件”应用查看1.进入手机设置——安全——应用权限——权限/应用2.在手机桌面找到手机管家——权限隐私——应用权限——权限/应用?当然,相对于被...
- 电脑能开机但是进不去桌面怎么办
-
打开任务管理器按Ctrl+Shift+Esc打开任务管理器。文件中运行新任务点击文件,运行新任务。输入指令重启桌面输入explorer.exe,点击确定,等待桌面重启完成就可以了。电脑已经是我们生活中...
- 怎样解除自动关机模式(怎样解除自动开关机)
-
1、打开手机主界面,找到系统自带的“时钟”应用,点击打开它。2、点击进入时钟后,点击右下角的“计时器”。3、进入到计时器后,点击“在计时结束启用雷达”这个选项。4、然后在这里,下拉到最下面,勾选“停...
- 电脑最高配置是什么配置2025
-
一,2023最新主流电脑装机配置如下。二,处理器可以使用十二代的i512400或者i512490f,内存16gb双通道,显卡rtx3060,主板可以使用b660m或者h610m。三,如果十三代酷睿...
- MySQL慢查询优化:从explain到索引,DBA手把手教你提升10倍性能
-
数据库性能是应用系统的生命线,而慢查询就像隐藏在系统中的定时炸弹。某电商平台曾因一条未优化的SQL导致订单系统响应时间从200ms飙升至8秒,最终引发用户投诉和订单流失。今天我们就来系统学习MySQL...
- 一文读懂SQL五大操作类别(DDL/DML/DQL/DCL/TCL)的基础语法
-
在SQL中,DDL、DML、DQL、DCL、TCL是按操作类型划分的五大核心语言类别,缩写及简介如下:DDL(DataDefinitionLanguage,数据定义语言):用于定义和管理数据库结构...
- 闲来无事,学学Mysql增、删,改,查
-
Mysql增、删,改,查1“增”——添加数据1.1为表中所有字段添加数据1.1.1INSERT语句中指定所有字段名语法:INSERTINTO表名(字段名1,字段名2,…)VALUES(值1...
- 数据库:MySQL 高性能优化规范建议
-
数据库命令规范所有数据库对象名称必须使用小写字母并用下划线分割所有数据库对象名称禁止使用MySQL保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)数据库对象的命名要能做到见名识意,...
- 下载工具合集_下载工具手机版
-
迅雷,在国内的下载地位还是很难撼动的,所需要用到的地方还挺多。缺点就是不开会员,软件会限速。EagleGet,全能下载管理器,支持HTTP(S)FTPMMSRTSP协议,也可以使用浏览器扩展检测...
- mediamtx v1.15.2 更新详解:功能优化与问题修复
-
mediamtxv1.15.2已于2025年10月14日发布,本次更新在功能、性能优化以及问题修复方面带来了多项改进,同时也更新了部分依赖库并提升了安全性。以下为本次更新的详细内容:...
- 一周热门
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
