Python 在matplotlib等高线图中手动设置标签错误
我试图在下面的代码中将手动标签添加到轮廓图中。标签是随机打印的。有人知道如何解决这个问题吗?这似乎是Matplotlib中的一个bug 问候,, 大卫Python 在matplotlib等高线图中手动设置标签错误,python,numpy,matplotlib,Python,Numpy,Matplotlib,我试图在下面的代码中将手动标签添加到轮廓图中。标签是随机打印的。有人知道如何解决这个问题吗?这似乎是Matplotlib中的一个bug 问候,, 大卫 将numpy导入为np 将matplotlib.pyplot作为plt导入 a=0.2 分辨率=100 xarray=np.linspace(0,0.25,num=分辨率) yarray=np.linspace(0,1,num=resolution) A=np.empty([分辨率,分辨率]) xc=0 yc=0 对于xarray中的x: 对于y
将numpy导入为np
将matplotlib.pyplot作为plt导入
a=0.2
分辨率=100
xarray=np.linspace(0,0.25,num=分辨率)
yarray=np.linspace(0,1,num=resolution)
A=np.empty([分辨率,分辨率])
xc=0
yc=0
对于xarray中的x:
对于yarray中的y:
#打印xc,yc
wp=1./np.pi*np.arctan(np.sin(np.pi*y)*np.sinh(np.pi*a/2.)/
(np.cosh(np.pi*x)-np.cos(np.pi*y)*np.cosh(np.pi*a/2.))
如果wp这是预期的行为
它为手动
参数中包含的每个x,y
数据坐标拾取最近的轮廓曲线。当在许多坐标中发现相同的轮廓曲线时,它们可能会开始聚集,就像您的情况一样
如果您使用:
y_pick = [0.01, 0.025, 0.05, 0.075, 0.1, 0.15, 0.2, 0.3, 0.5]
labelpos = ((0, i) for i in y_pick)
你会得到如下结果:
离题:
您可以对代码进行矢量化,避免相对较慢的for
循环:
import numpy as np
import matplotlib.pyplot as plt
a = 0.2
def fwp(x, y, a):
return (1./np.pi*np.arctan(np.sin(np.pi*y)*np.sinh(np.pi*a/2.)/
(np.cosh(np.pi*x)-np.cos(np.pi*y)*np.cosh(np.pi*a/2.))))
resolution = 100
xarray = np.linspace(0, 0.25, num=resolution)
yarray = np.linspace(0, 1, num=resolution)
x, y = np.meshgrid(xarray, yarray, copy=False)
A = fwp(x, y, a)
A[A<=0] += 1
B = np.fliplr(A)
AB = np.hstack((B, A))
将numpy导入为np
将matplotlib.pyplot作为plt导入
a=0.2
def fwp(x,y,a):
返回(1./np.pi*np.arctan(np.sin(np.pi*y)*np.sinh(np.pi*a/2.)/
(np.cosh(np.pi*x)-np.cos(np.pi*y)*np.cosh(np.pi*a/2.))
分辨率=100
xarray=np.linspace(0,0.25,num=resolution)
yarray=np.linspace(0,1,num=resolution)
x、 y=np.meshgrid(xarray,yarray,copy=False)
A=fwp(x,y,A)
A[Aif如果你尝试使用5个以上的标签,那么你会得到在顶部曲线重复的第一个标签(0.1)。使用np.dstack((np.zero(4),np.arange(0.1,0.5,0.1))[0]
你会得到一个正确的数字。对于我来说,答案和提示似乎也是一个bug!
import numpy as np
import matplotlib.pyplot as plt
a = 0.2
def fwp(x, y, a):
return (1./np.pi*np.arctan(np.sin(np.pi*y)*np.sinh(np.pi*a/2.)/
(np.cosh(np.pi*x)-np.cos(np.pi*y)*np.cosh(np.pi*a/2.))))
resolution = 100
xarray = np.linspace(0, 0.25, num=resolution)
yarray = np.linspace(0, 1, num=resolution)
x, y = np.meshgrid(xarray, yarray, copy=False)
A = fwp(x, y, a)
A[A<=0] += 1
B = np.fliplr(A)
AB = np.hstack((B, A))