matplotlib绘制三维曲面图时遇到的问题及解决方法

在使用 Matplotlib 绘制三维曲面图时,可能会遇到一些常见的问题。今天我将全程详细讲解下遇到问题并且找到应对方法的全部过程,希望能帮助大家。

在这里插入图片描述

1、问题背景

在使用 matplotlib 绘制三维曲面图时,遇到了一个问题。代码如下:

import matplotlib.pyplot as plt
from matplotlib import cm
import numpy

def H(n, f, l, delta, H_abs, H_ph):
    c0 = 2.99796e8
    n0 = 1.00027 + 0j
    n1 = complex(n[0], n[1])

    Sum = 0
    for i in range(1, delta+1):
        Sum = Sum + ((n0-n1)*exp(complex(0,-1*2*pi*f*n1*l/c0))/(n1+n0))**i

    H_Theo = 4*n0*n1*exp(complex(0,2*pi*f*l)*(n0-n1)/c0)*(1+Sum)/(n0+n1)

    M = abs(H_Theo) - H_abs
    A = cmath.phase(H_Theo) - H_ph

    return abs(M) + abs(A)

freq = 1213188709257.4814
l_real = 6.77e-4
d = 0
H_abs = 0.798653104536778
H_ph = 2.1845744701729926

n_test = numpy.arange(1.5, 2.5, 0.01).tolist()
k_test = numpy.arange(-0.05, 0.05, 0.001).tolist()

X = n_test
Y = k_test
X, Y = numpy.meshgrid(X, Y)

errore = []
for i in range(len(n_test)):
    errore.append(H([X[i],Y[i]], freq, l_real, d, H_abs, H_ph))

Z = errore

fig2 = plt.figure()
az = fig2.gca(projection='3d')
az.plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.3)
cset = az.contour(X, Y, Z, zdir='z', offset=min(Z)-1, cmap=cm.coolwarm)
cset = az.contour(X, Y, Z, zdir='x', offset=min(X)-1, cmap=cm.coolwarm)
cset = az.contour(X, Y, Z, zdir='y', offset=max(Y)+0.05, cmap=cm.coolwarm)

az.set_xlabel('n')
az.set_xlim(min(X)-1, max(X)+1)
az.set_ylabel('k')
az.set_ylim(min(Y)-0.05, max(Y)+0.05)
az.set_zlabel('Err')
az.set_zlim(min(Z)-1, max(Z)+1)

plt.show()

运行这段代码时,出现了如下错误:

n1 = complex(n[0], n[1])
TypeError: only length-1 arrays can be converted to Python scalars

2、解决方案

这个问题是由于在将 n 传递给 complex 函数时,n 是一个一维数组,而 complex 函数期望的是标量参数。为了解决这个问题,可以将 n 中的第一个元素和第二个元素分别作为实部和虚部传给 complex 函数,即:

n1 = complex(n[0], n[1])

修改后的代码如下:

import matplotlib.pyplot as plt
from matplotlib import cm
import numpy

def H(n, f, l, delta, H_abs, H_ph):
    c0 = 2.99796e8
    n0 = 1.00027 + 0j
    n1 = n[0] + 1j * n[1]

    Sum = 0
    for i in range(1, delta+1):
        Sum = Sum + ((n0-n1)*numpy.exp(-1*2*numpy.pi*f*n1*l/c0)/(n1+n0))**i

    H_Theo = 4*n0*n1*numpy.exp(2*numpy.pi*f*l*(n0-n1)/c0)*(1+Sum)/(n0+n1)

    M = numpy.abs(H_Theo) - H_abs
    A = numpy.angle(H_Theo) - H_ph

    return abs(M) + abs(A)

freq = 1213188709257.4814
l_real = 6.77e-4
d = 0
H_abs = 0.798653104536778
H_ph = 2.1845744701729926

n_test = numpy.arange(1.5, 2.5, 0.01).tolist()
k_test = numpy.arange(-0.05, 0.05, 0.001).tolist()

X = n_test
Y = k_test
X, Y = numpy.meshgrid(X, Y)

errore = []
for i in range(len(n_test)):
    errore.append(H([X[i],Y[i]], freq, l_real, d, H_abs, H_ph))

Z = errore

fig2 = plt.figure()
az = fig2.gca(projection='3d')
az.plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.3)
cset = az.contour(X, Y, Z, zdir='z', offset=numpy.min(Z)-1, cmap=cm.coolwarm)
cset = az.contour(X, Y, Z, zdir='x', offset=numpy.min(X)-1, cmap=cm.coolwarm)
cset = az.contour(X, Y, Z, zdir='y', offset=numpy.max(Y)+0.05, cmap=cm.coolwarm)

az.set_xlabel('n')
az.set_xlim(numpy.min(X)-1, numpy.max(X)+1)
az.set_ylabel('k')
az.set_ylim(numpy.min(Y)-0.05, numpy.max(Y)+0.05)
az.set_zlabel('Err')
az.set_zlim(numpy.min(Z)-1, numpy.max(Z)+1)

plt.show()

现在,代码可以正常运行,并绘制出三维曲面图。

通过仔细检查并尝试解决上述问题,你应该能够成功绘制出所需的三维曲面图。如果问题仍然存在,可以考虑查阅 Matplotlib 官方文档或在相关的社区论坛上寻求帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Faiss框架使用与FaissRetriever实现

Faiss是一个由Facebook AI Research开发的库,用于高效相似性搜索和稠密向量聚类。它为机器学习和深度学习中的向量检索问题提供了一种高效的解决方案,特别是在处理大规模数据集时。Faiss支持多种索引类型,包括基于量化的索引、基于聚类的索引…

Ubuntu系统的k8s常见的错误和解决的问题

K8s配置的时候出现的常见问题 Q1: master节点kubectl get nodes 出现的错误 或者 解决方法&#xff1a; cat <<EOF >> /root/.bashrc export KUBECONFIG/etc/kubernetes/admin.conf EOFsource /root/.bashrc重新执行 kubectl get nodes 记得需要查看一下自己的…

倒计时 3 天!立即预约苹果 WWDC24 直播;RLAIF-V 大规模多模态偏好数据集上线,有效减少不同 MLLMs 幻觉现象

6 月 3 日-6 月 7 日&#xff0c;hyper.ai 官网更新速览&#xff1a; 优质公共数据集&#xff1a;10 个 优质教程精选&#xff1a;2 个 社区文章精选&#xff1a;3 篇 热门百科词条&#xff1a;5 条 6-7 月截稿顶会&#xff1a;5 个 访问官网&#xff1a;hyper.ai 公共数…

37. 【Java教程】序列化与反序列化

上一小节我们学习了 Java 的输入输出流&#xff0c;有了这些前置知识点&#xff0c;我们就可以学习 Java 的序列化了。本小节将介绍什么是序列化、什么是反序列化、序列化有什么作用&#xff0c;如何实现序列化与反序列化&#xff0c;Serializable 接口介绍&#xff0c;常用序列…

【JavaEE精炼宝库】多线程(4)深度理解死锁、内存可见性、volatile关键字、wait、notify

目录 一、死锁 1.1 出现死锁的常见场景&#xff1a; 1.2 产生死锁的后果&#xff1a; 1.3 如何避免死锁&#xff1a; 二、内存可见性 2.1 由内存可见性产生的经典案例&#xff1a; 2.2 volatile 关键字&#xff1a; 2.2.1 volatile 用法&#xff1a; 2.2.2 volatile 不…

C++中的stack和queue

C中的stack和queue 一丶stack1. stack的介绍2. stack的使用3. stack的模拟实现 二丶queue1. queue的介绍2. queue的使用3. queue的模拟实现 一丶stack 1. stack的介绍 stack的文档介绍 关于stack&#xff1a; 1. stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的…

ROS socketcan_bridge使用说明

ROS socketcan_bridge使用说明&#xff08;以ubuntu20.04为例&#xff09; socketcan_bridge是什么 ROS针对socketcan提供了三个层次的驱动库&#xff0c;分别是ros_canopen&#xff0c;socketcan_bridge和socketcan_interface。 socketcan_interface&#xff1a; 功能&#x…

20240607在Toybrick的TB-RK3588开发板的Android12下适配IMX415摄像头和ov50c40

20240607在Toybrick的TB-RK3588开发板的Android12下适配IMX415摄像头和ov50c40 2024/6/7 11:42 【4K/8K摄像头发热量巨大&#xff0c;请做好散热措施&#xff0c;最好使用散热片鼓风机模式&#xff01;】 结论&#xff1a;欢迎您入坑。 Toybrick的TB-RK3588开发板的技术支持不…

STM32—按键控制LED(定时器)

目录 1 、 电路构成及原理图 2 、编写实现代码 main.c exit.c 3、代码讲解 4、烧录到开发板调试、验证代码 5、检验效果 此笔记基于朗峰 STM32F103 系列全集成开发板的记录。 1 、 电路构成及原理图 EXTI&#xff08;External interrupt/event controller&#xff…

机器视觉——物块分拣

项目进行到第四天&#xff0c;我们学到了很多&#xff0c;可以进行实操。 首先我们利用相机软件进行采图 然后导入代码里面 完整代码 dev_get_window (WindowHandle) list_image_files (采图, default, [], ImageFiles) for Index : 0 to |ImageFiles| - 1 by 1read_image (Im…

上BFT,是你的首选

上BFT&#xff0c;是你的首选 如果你想要找最智能的机器人&#xff0c;想要找品牌最全或者想要咨询专业的解决方案&#xff0c;一定不要错过BFT机器人采购站。BFT致力于为广大用户提供品质卓越、技术先进的机器人产品。 BFT里面机器人多种多样&#xff0c;不管您是想要工业机器…

取证工作: SysTools MailXaminer, 用强大功能辅助电子邮件调查工作的每一步

天津鸿萌科贸发展有限公司是 SysTools 系列软件的授权代理商。 SysTools MailXaminer 电子邮件取证软件将调查工作分为五个阶段&#xff1a;邮件加载、预览、搜索、分析及导出。软件对调查工作的每一阶段都提供了现代高级功能&#xff0c;以帮助数字取证调查员根据其具体要求对…

知乎知+广告推广开户充值的返点政策是怎样?

如何让您的品牌精准触达目标受众&#xff0c;实现高效传播与转化&#xff0c;成为了每一位市场人面临的挑战。为此&#xff0c;云衔科技作为业界领先的数字营销解决方案提供商&#xff0c;正式宣布全面支持知乎知广告开户及一站式代运营服务&#xff0c;旨在帮助各行业客户在知…

珠海鸿瑞毛利率持续下滑:核心产品销量大降,偿债能力偏弱

《港湾商业观察》黄懿 日前&#xff0c;珠海市鸿瑞信息技术股份有限公司&#xff08;下称“珠海鸿瑞”&#xff09;收到了北京证券交易所发出的第三轮审核问询函。 此前&#xff0c;2020年11月&#xff0c;珠海鸿瑞曾向深交所报送上市申请。IPO申请文件获受理后&#xff0c;珠…

用互斥锁解决缓存击穿

我先说一下正常的业务流程&#xff1a;需要查询店铺数据&#xff0c;我们会先从redis中查询&#xff0c;判断是否能命中&#xff0c;若命中说明redis中有需要的数据就直接返回&#xff1b;没有命中就需要去mysql数据库查询&#xff0c;在数据库中查到了就返回数据并把该数据存入…

pypi 发布自己的包

注册pypi个人用户 网址&#xff1a;https://pypi.org 目录结构dingtalk_utils 必须-pkgs- __init__.py .gitignore LICENSE 必须 README.md 必须 requirements.txt setup.py 必须安装依赖 pip install setuptools wheel安装上传工具 pip install twinesetup.py i…

Maxkb玩转大语言模型

Maxkb玩转大语言模型 随着国外大语言模型llama3的发布&#xff0c;搭建本地个人免费“人工智能”变得越来越简单&#xff0c;今天博主分享使用Max搭建本地的个人聊天式对话及个人本地知识域的搭建。 1.安装Maxkb开源应用 github docker快速安装 docker run -d --namemaxkb -p 8…

进入某个页面时将VUE中的某个Button按钮设置为选中状态

进入某个页面时将VUE中的某个Button按钮设置为选中状态 我想达到的效果如标题所说&#xff0c;目的是为了表示页面展示的内容是由于该按钮被选择的结果。 解决思路是使用VUE中的mounted()钩子函数&#xff0c;在该函数中调用按钮得到焦点方法、按钮被点击方法。具体代码如下&am…

Redis限流方案

限流简介 限流算法在分布式领域是一个经常被提起的话题&#xff0c;当系统的处理能力有限时&#xff0c;如何阻止计划外的请求继续对系统施压&#xff0c;是一个需要重视的问题。 除了控制流量&#xff0c;限流还有一个应用目的是用于控制用户行为&#xff0c;避免垃圾请求&a…

【echarts】如何制作,横坐标每个日期点如何对应一条竖线的图,以及 markline设置后不生效问题

图的样式如下&#xff1a; 在线演示 每一个日期&#xff0c;对应一条竖线展示。 echarts配置内容&#xff1a; 在线演示 option {xAxis: {type: category,data: [20240601, 20240602, 20240603, 20240604, 20240605, 20240606, 20240607] // X轴数据},yAxis: {type: valu…