python--matplotlib(4)

简介: Python环境下实现Matlab制图功能的第三方库,需要numpy库的支持,支持用户方便设计出二维、三维数据的图形显示,制作的图形达到出版级的标准。

前言

Matplotlib画图工具的官网地址是 http://matplotlib.org/


Python环境下实现Matlab制图功能的第三方库,需要numpy库的支持,支持用户方便设计出二维、三维数据的图形显示,制作的图形达到出版级的标准。


其他matplotlib文章

python--matplotlib(1)_码银的博客-CSDN博客


python--matplotlib(2)_码银的博客-CSDN博客


python--matplotlib(3)_码银的博客-CSDN博客


实验环境

Pycharm2020.2.5社区版,win11


正文

三维立体图形:


除了要引用matplotlib外,还需要引用mpl_toolkits.mplot3d库(from mpl_toolkits.mplot3d import Axes3D),需要在matplotlib的figure函数生成实例对象后(fig = plt.figure()),设置其制图模式为3d(fig.add_subplot(111, projection='3d'))。


1.简单三维图

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
sd = fig.add_subplot(111, projection='3d')#111,221,222,223,224
plt.show()

3f35b25d27a387ffa601d1c557c0907a_fc71951f8e8d4c5ba27dcb1cfcdf948c.png

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
sd = fig.add_subplot(111, projection='3d')#111,221,222,223,224
X = [0, 1, 2, 1, 2, 4]
Y = [0, 4, 4, 1, 3, 4]
Z = [0, 4, 0, 0, 2, 4]
sd.plot_trisurf(X, Y, Z)
plt.show()

6b5e15f54af2ee99dd4383718202d368_e06d235f9f364e9fb7ee7144e26336eb.png


这个3d图可以转动,方便观察;


第四行代码:111,就是全屏或者或是正中间,剩下(221、222、223、224)对应四个角落,下面我依次截图看一下:

6859776fd05ae9b0bfc029bae1f54665_df0ab86fe68848d5b35cdd3f1772c6f0.png


6dcdad441fdd28eb6f95481b0a7c08d2_6a1231940bba4e499d62e1daf267fdfb.png

a8e23d5bcc2de751664c15ee4cc575cf_b77f3348d7dd4370b1e1be991fea5eb0.png


e4d1389db5ef0c32c896642c040edada_f76cfbb17b84473b958ae48e206a6ae4.png

plot_trisurf(z,y,z,...) :画3d曲平面的函数。


x,y,z要竖着看,一列对应的是一个点的坐标。


2.三维曲面plot_trisurf(薯片)

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
radius = np.linspace(0.1, 1, 25)
#np.linspace(start = 0.1, stop = 1, num = 25)
#stop 参数数值范围的终止点。通常其为结果的最后一个值,但如果修改endpoint = False, 则结果中不包括该值
angle = np.linspace(0, 2 * np.pi, 60, endpoint=False)
angle = np.repeat(angle[..., np.newaxis],25, axis=0)
#angles[..., np.newaxis]将每个元素转化为列表,np.repeat(a,repeats,axis=None);
# repeats:复制次数;axis=None,flatten当前矩阵,axis=0,增加行数,列数不变,axis=1,增加列数,行数不变
x = np.append(1, (radius * np.cos(angle)).flatten())
y = np.append(0, (radius * np.sin(angle)).flatten())
#flatten()是对多维数据的降维函数
y=y/2
x=x/2
z = np.sin(x * y)
z=z/2
fig = plt.figure()
sd = fig.add_subplot(projection='3d')
sd.plot_trisurf(x, y, z, cmap=plt.get_cmap('YlOrRd'), linewidth=0.1)
plt.show()

bbedb7accfcd75e703677210e549f1bd_06c6b554141f44dea159619dbb2d2413.png



a.导入库

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

b.数据准备

radius = np.linspace(0.1, 1, 25)
angle = np.linspace(0, 2 * np.pi, 60, endpoint=False)
angle = np.repeat(angle[..., np.newaxis],25, axis=0)
x = np.append(1, (radius * np.cos(angle)).flatten())
y = np.append(0, (radius * np.sin(angle)).flatten())
y=y/2
x=x/2
z = np.sin(x * y)
z=z/2

linspace()函数


np.linspace(start = 0.1, stop = 1, num = 25)


start 参数数值范围的起始点。


stop 参数数值范围的终止点。通常其为结果的最后一个值,但如果修改endpoint = False, 则结果中不包括该值


num:数据数量,本篇选择了25个。



flatten()函数是对多维数据的降维函数,将矩阵的行之间首尾连接,组成一个一维矩阵;



repeat()函数


np.repeat(a,repeats,axis=0)


repeats:复制次数;


axis=None,把矩阵变成了一个一维矩阵[1,2,3,4];


axis=0,增加行数,列数不变;


axis=1,增加列数,行数不变


angles[..., np.newaxis]将每个元素转化为列表,


c.画图

fig = plt.figure()
sd = fig.add_subplot(projection='3d')
sd.plot_trisurf(x, y, z, cmap=plt.get_cmap('YlOrRd'), linewidth=0.1)
plt.show()

cmap:调换颜色的作用


linewidth:线宽


3.三维曲面标题等设置

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams["font.sans-serif"] = ["SimHei"]# 正确显示中文和负号
plt.rcParams["axes.unicode_minus"] = False
fig = plt.figure()
sd = fig.add_subplot(111, projection='3d')#111,221,222,223,224
X = [0, 1, 2, 1, 2, 4]
Y = [0, 4, 4, 1, 3, 4]
Z = [0, 4, 0, 0, 2, 4]
sd.set_xlabel('x轴')
sd.set_ylabel('y轴')
sd.set_zlabel('z轴')
plt.title('这是标题')
sd.plot_trisurf(X, Y, Z)
plt.show()

0258524ec6aaf5ff75811c66b70c2eb8_1176c0f00b4641938d1b4703e965efe8.png


我就直接使用标题1里面的代码加工了,


sd.set_xlabel('x轴')#x轴函数


sd.set_ylabel('y轴')#y轴函数


sd.set_zlabel('z轴')#z轴函数


plt.title('这是标题')#添加标题函数


因为我使用了中文,


plt.rcParams["font.sans-serif"] = ["SimHei"]# 正确显示中文和负号

plt.rcParams["axes.unicode_minus"] = False


所以还得用这两行代码,要是仅仅使用英文的话删除即可。


4.小结

当初我第一次numpy库的时候的心得:使用pip install matplotlib安装matplotlib库,而 numpy 库我是在c:\users\yonghuming\appdata\local\programs\python\python39\scripts的目录下使用pip install numpy-1.22.4-cp39-cp39-win_amd64.whl才安装成功的。


现在我使用的是anaconda,直接把大部分的库安装好了,省时省力。

相关文章
|
3月前
|
人工智能 分布式计算 安全
多Agent协同系统:从"协作工具"到"战略生产系统"的架构演进
本文以"枢衡"多Agent集群的架构升级为例,探讨了多Agent协同系统在生产环境中面临的典型问题,以及如何通过角色专业化、Skill收敛、信誉积分、双模式工作法和通信纪律等机制,将松散的Agent问答组演进为具备质量闭环的战略生产系统
多Agent协同系统:从"协作工具"到"战略生产系统"的架构演进
|
4月前
|
NoSQL 前端开发 PHP
ThinkPHP短剧源码系统搭建高并发架构_uniapp/Flutter/原生多技术栈Docker一键部署
2026年短剧成流量黑马,但高并发易致卡顿、掉线、支付失败。本文详解ThinkPHP8+Swoole协程优化、多端自适应(uniapp/Flutter/原生)、Docker一键部署及防盗版、弹幕集群等企业级方案,助你打造坚如磐石的短剧系统。
|
缓存 移动开发 Rust
前端构建工具 Mako 开源了
Hi,我是 sorrycc,Mako 的主要负责人之一,也是 Umi、Dva、Father 等库的作者。 很开心,Mako 终于开源了! Github 地址:https://github.com/umijs/mako/ 今天和大家正式介绍下他。
1261 4
|
9月前
|
弹性计算 测试技术
阿里云服务器按使用流量计费:适用场景、收费标准及费用控制详解
阿里云服务器的按使用流量计费模式,针对公网访问需求具有特定场景适配性,其收费标准因地域而异,同时可通过相关设置控制费用风险,以下为详细说明:
|
11月前
|
弹性计算 安全 应用服务中间件
阿里云渠道商:怎么配置阿里云网络ACL?
阿里云网络ACL是子网级无状态防火墙,支持精准流量控制、规则热生效且免费使用。本文详解5步配置流程,助您实现Web与数据库层的安全隔离,提升云上网络安全。
|
运维 监控 搜索推荐
智慧班牌系统:校园管理与互动教学的全新解决方案
智慧班牌系统是教育信息化的重要载体,集校园管理、家校互动、教学辅助于一体。通过智能终端与云端平台联动,实现信息展示、课堂互动、考勤管理、德育评价等功能,助力构建智慧校园生态。
491 1
|
人工智能 自然语言处理 监控
LongPort MCP:证券业首个券商MCP,AI赋能智能投资新时代,散户也能玩转机构级交易
LongPort MCP是长桥集团推出的证券行业首个券商模型上下文协议,通过标准化接口实现AI与金融服务的无缝对接,支持自然语言交互的智能投资服务。
2940 8
LongPort MCP:证券业首个券商MCP,AI赋能智能投资新时代,散户也能玩转机构级交易
|
算法 安全 数据安全/隐私保护
微信红包尾数0-9技巧控制是真的假的?
微信红包尾数控制的技术真相 1. 红包算法基础原理
|
移动开发 物联网 API
HTML6的最新消息
截至2023年10月,HTML6 仍处于提议和讨论阶段,尚未正式发布。W3C 和 WHATWG 等组织正不断迭代和改进 HTML 规范,采用“增量更新”策略。HTML6 的潜在新特性包括:改进的语义和结构元素、增强的 Web 组件支持、更强大的 API、多媒体功能升级、更好的可访问性和性能优化,以及对物联网的支持。这些改进将使开发者能够创建更复杂、高性能且符合无障碍标准的网页。然而,HTML 的发展是非线性的,新版本没有明确的发布时间,开发者应关注官方动态获取最新信息。
|
安全 iOS开发